快速排序

#include "stdafx.h"

int a[101], n;

void quicksort(int left, int right) {
	int i,j,t,temp;
	if(left>right)
		return ;
	temp = a[left];//存储基准数
	i = left;
	j = right;
	while(i!=j) {
		//先从右往左找
		while(a[j] >= temp && i<j) {
			j--;
		}
		//再从左往右找
		while(a[i] <= temp && i<=j) {
			i++;
		}
		//交换两个数再数组中的位置
		if(i<j) {
			t = a[i];
			a[i] = a[j];
			a[j] = t;
		}
	}
	//最终将基准数归位
	a[left] = a[i];
	a[i] = temp;
	quicksort(left, i-1);//继续处理左边的,递归
	quicksort(i+1, right);//继续处理右边的,递归

}
int _tmain(int argc, _TCHAR* argv[])
{
	int i,j,t;
	scanf_s("%d", &n);
	for(i=1;i<=n;i++) {
		scanf_s("%d", &a[i]);
	}
	quicksort(1, n);

	//输出结果
	for(i=1;i<=n;i++) {
		printf("%d ", a[i]);
	}

	getchar();
	getchar();
	return 0;
}

  快速排序基于二分思想,最差时间复杂度为O(N2),平均时间复杂度为O(NlogN)

原文地址:https://www.cnblogs.com/fancing/p/8619397.html