本次文章所讲是快速排序,虽说是快速排序,但在某些情况下本排序的时间复杂度会等于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);
}
该算法的核心是找到一个基准,进行数次排序,每次排序完后左边是小于基准的数,右边是大于基准的数。