排序

#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; }


【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/zhchoutai/p/8579380.html