各种排序方法比较

来源:互联网 发布:淘宝qq推广软件 编辑:程序博客网 时间:2024/06/05 20:32

冒泡法

void sort(int *ar, int num){int i, j;int t;int flag = 0;print(ar, num);for(i = 1; i < num; i++) //num个数需要排num - 1次{flag = 0;for(j = 0; j < num - i; j++)   //每次只需对前num - i个数排序{if(ar[j] > ar[j+1]) //如果第j个数比它后面一个数大,就要交换{t = ar[j];ar[j] = ar[j+1];ar[j+1] = t;flag = 1;}}if(flag == 0) //如果flag == 0表明本次排序没有经过一个交换,所以说明它己经有序了,就不用再循环{break;}print(ar, num);}print(ar, num);}
-----------------------------------------------------------

简单排序法

void sort(int *ar, int num){int i, j, t, min;print(ar, num);for(i = 0; i < num - 1; i++){min = i; //假设最小的一个数的下标就是ifor(j = i + 1; j < num; j++){if(ar[min] > ar[j]){min = j; //用min保存最小的数的下标}}if(min != i) //把最小的那个数放到i这个位置{t = ar[min];ar[min] = ar[i];ar[i] = t;}}print(ar, num);}
---------------------------------------------

插入排序算法

void sort(int *ar, int num){int i, j, t;print(ar, num);for(i = 1; i < num; i++) //取出第i个数,用来和它前面的i - 1个数进行比较{for(j = i - 1; j >= 0; j--){if(ar[i] >= ar[j])break;}if(j != i - 1){t = ar[i];memmove(&ar[j+2], &ar[j+1], (i - j - 1) * sizeof(int));  //把j之后的(i - j - 1)个数据通通向后移动一个位置ar[j+1] = t;}print(ar, num);}print(ar, num);}
--------------------------------------------

快速排序算法

void sort(int *ar, int left, int right){int l = left, r = right;int t;if(r > l){t = ar[l]; //从数组左边取一个数while(r > l){while(r > l){if(ar[r] <= t) //从右边找一个比t小的数{ar[l] = ar[r]; //把找到的数放到ar[l]中l++;break;}r--;}while(r > l){if(ar[l] > t) //从右边找一个比t大的数{ar[r] = ar[l]; //把找到的数放到ar[r]中r--;break;}l++;}}ar[l] = t; //把之前的t主回到最后空出来的那个位置sort(ar, left, l - 1);   //把序列的左半部份重复之前的排序sort(ar, l + 1, right);  //把序列的右半部份重复之前的排序}}

-----------------------------------------

二分法查找

int bfind(int* a,int len,int val){    int m = len/2;    int l = 0;    int r = len;    while(l!=m && r!= m)    {        if(a[m] > val)        {            r = m;            m = (m+l)/2;        }        else if(a[m] < val)        {            l = m;            m = (m+r)/2;        }        else            return m;    }    return -1;   //没有找到}



0 0
原创粉丝点击