快速排序算法

快速排序算法是一种非常高效的内部排序算法,其平均时间复杂度为O(nlogn),且其性能在相同时间复杂度中最好,不过

在最坏的情况下会退化成冒泡排序,此时时间复杂度为O(n^2)。就平均性能来讲,快速排序是一种非常高效的算法,现在

介绍一种比较简单的快速排序的实现算法。

代码如下:

#include <stdio.h>
#define  N  10
int main()
{
	void sort(int *a, int left, int right);
	int a[N];
	int i;
	for(i = 0; i < N; i++)
		scanf("%d", &a[i]);

	sort(a, 0, N-1);     // 缺陷,主函数中调用时,要检查left是否小于right
	for(i = 0; i < N; i++)
		printf("%d ", a[i]);

	return 0;
}

void sort(int *a, int left, int right)
{
	if(left < right)   // 当只剩一个数据时返回,即left == right
	{
		int key = a[left];
		int low = left;
		int high = right;
		while(low < high)
		{
			while(low < high && a[high] >= key) high--;
			a[low] = a[high];
			
			while(low < high && a[low] <= key) low++;
			a[high] = a[low];
		}
		a[low] = key;
		sort(a, left, low-1);   // 对左半部分排序
		sort(a, low+1, right);  // 对右半半部分排序
	}
}

  

原文地址:https://www.cnblogs.com/wkx12/p/5175379.html