排序

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

你可能感兴趣的:(冒泡排序,快速排序,插入排序)