快速排序算法是一种非常高效的内部排序算法,其平均时间复杂度为O(nlogn),且其性能在相同时间复杂度中最好,不过
在最坏的情况下会退化成冒泡排序,此时时间复杂度为O(n^2)。就平均性能来讲,快速排序是一种非常高效的算法,现在
介绍一种比较简单的快速排序的实现算法。
代码如下:
#include <stdio.h>
#define N 10
int main()
{
void sort(int *a, int left, int right);
int a[N];
int i;
for(i = 0; i < N; i++)
scanf("%d", &a[i]);
sort(a, 0, N-1); // 缺陷,主函数中调用时,要检查left是否小于right
for(i = 0; i < N; i++)
printf("%d ", a[i]);
return 0;
}
void sort(int *a, int left, int right)
{
if(left < right) // 当只剩一个数据时返回,即left == right
{
int key = a[left];
int low = left;
int high = right;
while(low < high)
{
while(low < high && a[high] >= key) high--;
a[low] = a[high];
while(low < high && a[low] <= key) low++;
a[high] = a[low];
}
a[low] = key;
sort(a, left, low-1); // 对左半部分排序
sort(a, low+1, right); // 对右半半部分排序
}
}