排序
#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\n", num[n - 1]);
}
return 0;
}

浙公网安备 33010602011771号