顺序表的冒泡排序算法及二分法查找代码实现

本文主要实现了比较经典的冒泡排序算法(对已经有序或者基本有序的顺序表复杂度大大降低),和二分法查找,各位看官看代码吧

//冒泡排序算法及二分法查找
#include "stdio.h"
typedef struct {
    int key;
}SSTable_Elem_Type;
typedef struct {
    SSTable_Elem_Type*elem;
    int length;
}SSTable_Typedef;
void Bubble_Sort(SSTable_Typedef*ST)
{
    unsigned char i = 0, j = 0;
    unsigned char finish_flag = 0;//0:完成排序的
    SSTable_Elem_Type tmp;
    for (i = 0; i < ST->length; i++)
    {
        finish_flag = 1;//假设完成了排序
        for (j = 0; j < ST->length - i - 1; j++)
        {
            if (ST->elem[j].key>ST->elem[j + 1].key)
            {
                finish_flag = 0;
                //交换数据
                tmp = ST->elem[j];//每次都取最大的
                ST->elem[j] = ST->elem[j + 1];
                ST->elem[j + 1] = tmp;
            }
        }
        if (finish_flag == 1)//一趟冒泡排序没有发生交换,说明已经有序已经完成排序
            break;
        printf("sorting\r\n ");
    }
}
//初始化顺序表
void Init_SSTable(SSTable_Typedef* SSTable, SSTable_Elem_Type*buf, int len)
{
    SSTable->elem = buf;
    SSTable->length = len;
}
//折半查找
//buf 已经排序
int bisearch(SSTable_Typedef* SSTable,int search_data)
{
    int low = 0;
    int high=SSTable->length-1;
    int mid;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (search_data == SSTable->elem[mid].key) return (mid+1);
        else if (search_data < SSTable->elem[mid].key) high = mid - 1;
        else low = mid + 1;
    }
    return 0;
}
#define len 5
int main(void)
{
    SSTable_Typedef ST;
    SSTable_Elem_Type ST_Elem[10];

    int i = 0;
    Init_SSTable(&ST, ST_Elem, 10);
    for (i = 0; i < 10; i++)
    {
        ST_Elem[i].key = 10-i;
    }
    printf("unsorted:");
    for (i = 0; i < 10; i++)
    {
        printf("%d ", ST.elem[i].key);
    }
    Bubble_Sort(&ST);
    printf("\r\nsorted:");
    for (i = 0; i < 10; i++)
    {
        printf("%d ", ST.elem[i].key);
    }
    printf("%d",bisearch(&ST, -11) );
    printf("\r\n");
    while (1);
    return 0;
}

结果:

时间: 2024-11-03 21:20:41

顺序表的冒泡排序算法及二分法查找代码实现的相关文章

python的算法:二分法查找(1)

1.什么是二分法查找: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较. 3.如果在某一步骤数组为空,则代表找不到. 每次都是i减半查找,其时间消耗为O(logn) 最简单的一个循环算法就是: def binary_search_loop(lst,value): low,high=0,len(value)-1 while low<=high: mid=

I学霸官方免费教程二十九:Java查找算法之二分法查找

二分法查找算法 基本步骤:    第一步:获取数组中间的下标    第二步:中间下标处的值和目标值比较,如果目标值大,说明要找的值在数组的后边一半中    第三步:再次获取数组右边一半的中间下标    第四步:再次用获得的中间下标和目标值进行比较    后续步骤以此类推,这样每次查找都在"半份"数据中进行,所以又叫折半查找.这也是为什么使用二分法查找之前必须要对数组进行排序的原因.如果不排序,将无法判断目标值在哪"半份"中 实例: package algorithm

顺序表的创建、初始化、查找、删除、插入和合并

本文参考国家精品课程耿国华的数据结构写的,发现了书上的一些问题,并做了简单修正,补足了整个程序过程,若有不足,请跟帖指正!!! #include<iostream> #include<cstdio> using namespace std; #define MAXSIZE 100 #define ERROR 0 #define OK 1 typedef int ElemType; typedef struct { ElemType *elem; int last; }SqList;

冒泡算法和二分法查找

1.对一个整形数组进行冒泡排序 public  static void mp(int []a){ for(int i=0;i<a.length;i++){ for(int j=i+1;j<a.length;j++){ if(a[i]<a[j]){ temp = a[i]; a[i] = a[j]; a[j] = temp; } } } } 2.二分法查找(针对已排序数组) public static int ef(int []a, int tag){ int low = 0; int h

stl_algorithm算法之二分法查找

二分法查找: 7.60.template <class ForwardIterator, class T> ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val) { ForwardIterator it; iterator_traits < ForwardIterator>::difference_type count, step; count = di

顺序表之插入算法

public class text{    public static void main(String[] args) {        int[] alist=new int[10];        alist[0]=14;        alist[1]=55;        alist[2]=101;        alist[3]=256;        insert(alist, 88, 1);        insert(alist, 34, 2);        insert(a

2. 顺序表 数据结构与算法(python)

2. 顺序表 在程序中,经常需要将一组(通常是某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录他们,传进传出函数等.一组数据中包含的元素个数可能发生变化(可以增加或删除元素). 对于这种需求,最简单的解决方法便是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数据之间的某种关系. 这样的一组序列元素的组织形式,我们可以将其抽象为线性表.一个线性表是某类元素的一个集合,还记录着元素之间的一种顺序关系.线性表是最基本的数据结构之

C语言【顺序表】冒泡排序,一次选出最大最小的数据,二分查找,初始化顺序表

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<assert.h> #include<stdlib.h> #include<string.h> #define MAX_SIZE 5 typedef int DataType; typedef struct SeqList {     size_t size;     DataType array[MAX_SIZE]; }SeqList;

php常用的排序算法与二分法查找

一 : 归并排序 将两个的有序数列合并成一个有序数列,我们称之为"归并".归并排序(Merge Sort)就是利用归并思想对数列进行排序.根据具体的实现,归并排序包括"从上往下"和"从下往上"2种方式. 1. 从下往上的归并排序:将待排序的数列分成若干个长度为1的子数列,然后将这些数列两两合并:得到若干个长度为2的有序数列,再将这些数列两两合并:得到若干个长度为4的有序数列,再将它们两两合并:直接合并成一个数列为止.这样就得到了我们想要的排序结果