排序

来源:互联网 发布:指数补偿算法 编辑:程序博客网 时间:2024/04/29 10:51
#include <stdio.h>#define N 1000005int num[N];void qsort( int low, int high){if (low >= high){return;}int first = low;int last = high;int key = num[first];//用字表的第一个记录作为枢轴while (first < last){while (first < last&&num[last] >= key)  --last;num[first] = num[last];//将比第一个小的移到低端while (first < last&&num[first] <= key) ++first;num[last] = num[first];//将比第一个大的移到高端}num[first] = key;//枢轴记录到位qsort(low, first - 1);qsort(last + 1, high);}int main(){int n;while (scanf("%d", &n), n){for (int i = 0; i < n; i++)scanf("%d", &num[i]);//  冒泡排序//  比较相邻的元素。如果第一个比第二个大,就交换他们两个。/*for (int i = 0; i < n - 1; i++)    // 总共比较n-1趟,每比完一趟后得到一个最大值放在数组尾for (int j = 0; j<n - 1 - i; j++)  // 每一趟比较的次数{if (num[j]>num[j + 1]) //相邻的元素进行比较{int temp = num[j];num[j] = num[j + 1];num[j + 1] = temp;}}*///插入排序//有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,要求插入后此数据序列仍然有序。/*for (int i = 1; i < n; i++){ //趟数也为n-1,因为第一个数字不需要插入,从第二个数字开始,插入它前面的数组int temp = num[i];int j;for ( j = i; j>0 && num[j - 1] > temp; j--)//每趟的插入过程num[j] = num[j - 1];num[j] = temp;}*///选择排序// 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,// 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。// 这个很好理解吧, -_-/*for (int i = 0; i < n - 1; i++){for (int j = i + 1; j < n; j++){if (num[i]>num[j]){int temp = num[i];num[i] = num[j];num[j] = temp;}}}*///快速排序// 通过一趟排序将要排序的数据分割成独立的两部分,// 其中一部分的所有数据都比另外一部分的所有数据都要小,// 然后再按此方法对这两部分数据分别进行快速排序// 因为用到递归,所以用函数来实现//qsort(0, n - 1);//输出for (int i = 0; i < n - 1; i++)printf("%d ", num[i]);printf("%d\n", num[n - 1]);}return 0;}

3 0