c语言快速排序算法示例代码分享
c语言快速排序算法示例代码分享
发布时间:2016-12-28 来源:查字典编辑
摘要:步骤为:1.从数列中挑出一个元素,称为"基准"(pivot);2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在...

步骤为:

1.从数列中挑出一个元素,称为 "基准"(pivot);

2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

复制代码 代码如下:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#define RANDOM(i) (rand()%i)

#define N9 //设置数组长度

//分区操作

int Partition(int array[], int left, int right)

{

int i,j;

int temp;

j = left-1;

for (i=left; i<=right; i++)

{

if (array[i] <= array[right])//以最后一个数组的值为基准

{

j++;

temp = array[j];

array[j] = array[i];

array[i] = temp;

}

}

return j;

}

//迭代运算

void QuikSort(int array[], int left, int right)

{

int pivot;

if (left < right)

{

pivot = Partition(array, left, right);

QuikSort(array, left, pivot-1);

QuikSort(array, pivot+1, right);

}

}

//示例

int main()

{

int i = 0;

int a[N];

srand((int)time(0)); //设置随机数种子

for (i=0; i<N; i++) //排序前

{

a[i] = RANDOM(100);

printf("%dt", a[i]);

}

printf("nn");

QuikSort(a, 0, N-1);

for (i=0; i<N; i++) //排序后

{

printf("%dt", a[i]);

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C语言学习
热门C语言学习
编程开发子分类