排序-----快速排序

快速排序是一种非常高效的排序算法,原理为:对于一组给定的数据,取一个基准值,把小于基准值的数放到前部分,大于基准值的放到后部分,其中前部分的所有数都不大于后部分任意一个数,然后再依次对前后两部分的数进行快排,递归该过程,直到序列中的所有数均为有序为止。

以数组{4,6,3,1,2,7,8,9,5}为例:

第一步:以4为基准值,[2,1,3] 4 [6,7,8,9,5]

第二步:分别以2,6为基准值,[1] 2 [3] 4 [5] 6 [7,8,9]

第三步:以7为基准值,1,2,3,4,5,6,7,[8,9]

第四步:以8为基准值,1,2,3,4,5,6,7,8,9

平均时间复杂度为O(nlogn),平均空间复杂度O(logn)

//快速排序
#include<stdio.h>

void Sort(int a[], int low, int high)
{
	if (low >= high)
		return;
	int i = low;
	int j = high;
//取a[i]为基准关键字
	int index = a[i];
//把小于index的数分到前面,大于Index的数分到后面
	while (i < j)
	{
		while (i<j && a[j] > index)
			--j;
		if (i < j)
			a[i++] = a[j];
		while (i < j && a[i] < index)
			++i;
		if (i < j)
			a[j--] = a[i];
	}
	a[i] = index;
//继续进行排序,直到每一组的个数为1时
	Sort(a, low, i - 1);
	Sort(a, i + 1, high);
}
//进行快速排序
void QuickSort(int a[], int len)
{
	Sort(a, 0, len - 1);
}

int main()
{
	int array[] = { 1,4,7,9,2,3,5,8 };
	int len = sizeof(array) / sizeof(array[0]);
	QuickSort(array,len);
	for (int i = 0;i < len;++i)
		printf("%d ", array[i]);
	printf("\n");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_39916039/article/details/81664028