快速排序算法如下:
#include <stdio.h>
int a[101] =
{ 0, 6, 1, 2, 7, 9, 3, 4, 5, 10, 8 };
int n = 10; //定义全局变量,这两个变量需要在子函数中使用
void quickSort(int left, int right)
{
int i, j, t, temp;
if (left > right)
return;
temp = a[left]; //temp中存的就是基准数
i = left;
j = right;
while (i < j) //改进
{
while (a[j] >= temp && i < j) //顺序很重要,要先从右往左找
j--;
while (a[i] <= temp && i < j) //再从左往右找
i++;
if (i < j)//当哨兵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);//继续处理右边的,这里是一个递归的过程
}
void main()
{
int i, j, t;
quickSort(1, n); //快速排序调用
for (i = 1; i <= n; i++)
{
printf("%3d", a[i]);//排序后
}
printf("\n\n");
}
快速排序的时间复杂度
是 O(NlogN)。