您的位置:首页 > 编程语言 > C语言/C++

排序【6】之快速排序的C语言实现

2018-01-20 13:32 288 查看
快速排序是一种非常高效的排序方法,采用“分而治之”的思想,把大的拆分为小的,小的在拆分为更小的。

原理是:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前部分的所有记录均比后部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均为有序为止。

快速排序特点:

稳 定 性:不稳定

平均时间复杂度: O(nlog2n)

排序过程举例:



继续进行第二趟第三趟直至排完为止

代码:

#include <stdio.h>

void sort(int array[], int low, int high)
{
int i, j;
int index;
if(low >= high) //递归结束的控制条件,满足时 return 返回上一级
{
return;
}

i = low;
j = high;
index = array[i];

while(i < j)
{
//从后往前遍历,找到第一个比index小的数
while(i < j && array[j] >= index )
{
j--;
}
//如果在下标 i 与 j 相遇之前,找到第一个比index小的数
//与此同时,将这个数复制到 i 所在的位置,并将 i 向后挪一个位置
if(i < j)
{
array[i++] = array[j];
}

//从 i 从前往后遍历,找到第一个比index大的数
while(i < j && array[i] < index)
{
i++;
}
//如果在下标 i 与 j 相遇之前,找到第一个比index大的数
//与此同时,将这个数复制到 j 所在的位置,并将 j 向后前一个位置
if(i < j)
{
array[j--] = array[i];
}
}
array[i] = index;
sort(array, low, i - 1);
sort(array, i + 1, high);

}

void QuickSort(int array[], int len)
{
sort(array, 0, len - 1 );
}

int main()
{
int i, length;
int a[] = {28, 17, 6, 18, 37, 3, 20, 31};
length = sizeof(a) / sizeof(a[0]);

QuickSort(a, length);
for(i = 0; i < length ; i++)
{
printf("%d ", a[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息