快速排序和冒泡排序一样属于交换排序,它是一种非常高效的排序。它采用了一种分治的策略,把大的拆分成
小的,再把小的拆分为更小的。
快速排序是一种不稳定的排序
时间复杂度:最好情况:O(nlogn) 最坏情况:O(n2) 平均情况:O(nlogn)
空间复杂度:O(logn)
那么快速排序主要是什么思想呢?
对于一组无序数据,先任选一个记录作为基准,一般选第一个为基准,然后将数据与这个基准进行比较,分为左右区间
小于它的放在前面,大于它的放在后面,然后通过递归调用对左右区间进行快速排序,直到所有数据有序为止
代码如下:
#include <stdio.h>
void Sort(int par_array[], int low, int high)
{
int i,j;
int index;
if (low >= high)
{
return ;
}
i = low;
j = high;
index = par_array[i]; //基准
while(i < j)
{
while(i < j && par_array[j] >= index) //大于基准的放在右边,小于的放在左边
j--;
if (i < j)
par_array[i++] = par_array[j];
while(i < j && par_array[i] <= index)
i++;
if (i < j)
par_array[j--] = par_array[i];
}
par_array[i] = index;
Sort(par_array, low, i-1); //递归左右区间,直到有序
Sort(par_array, i+1, high);
}
void QuickSort(int array[], int length)
{
Sort(array, 0, length-1);
}
int main1()
{
int i;
int a[] = {0, 6, 1, 3, 2, 5, 8, 9, 7, 6};
int len = sizeof(a) / sizeof(a[0]);
QuickSort(a, len);
for (i = 0; i < len; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}