快速排序,时间复杂度O(NlgN)

本次文章所讲是快速排序,虽说是快速排序,但在某些情况下本排序的时间复杂度会等于N2.

代码如下,实现降序。

#include<stdio.h>
int pr(int left, int right);//降序函数
int a[101];//全局数组,静态变量,可以在主函数main中与降序数组中访问。
int main()
{
	int left, right;//定义左右端。
	int n;
	scanf("%d", &n);//选择排序的大小
	for (int i = 0; i < n; i++)//赋值
		scanf("%d ", &a[i]);
	left = 0;
	right = n-1;
	pr(left, right);
	for (int j = 0; j < n; j++)
		printf(" %d ", a[j]);
	getch();
	return 0;
}
int pr(int left, int right)
{
	int team;
	if (left > right)//结束函数的条件
		return;
	int i = left;
	int j = right;
	while (i != j)
	{
		while (a[j] <= a[left] && j > i)
			j--;
		while (a[i] >= a[left] && i < j)
			i++;
		if (i < j)
		{
			team = a[i];
			a[i] = a[j];
			a[j] = team;
		}
	}
	team = a[i];
	a[i] = a[left];
	a[left] = team;
	pr(left, i -1);
	pr(i + 1, right);

}

该算法的核心是找到一个基准,进行数次排序,每次排序完后左边是小于基准的数,右边是大于基准的数。

猜你喜欢

转载自blog.csdn.net/qq_43702629/article/details/84557785
今日推荐