#include <stdio.h> #define N 1000005 int 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 ", num[n - 1]); } return 0; }