您的位置:首页 > 其它

排序六之快速排序

2016-02-03 16:08 162 查看
Quick Sort

一种类似于冒泡排序的排序算法;并对冒泡排序进行了改进,基于交换排序思想。

快速排序算法通过多次比较和交换来实现排序,其排序流程如下:

1:首先设定一个分界值,通过该分界值将数组分成左右两个部分。

2:将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数据的左边。此时,左边部分中各元素都小于等于分界值,而右边部分中各元素都大于等于分界值。

3:然后,左边和右边的数据可以独立排序。对于左侧的数组数据,,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧数据也可以做类似处理。

4:重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的数据。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 10
void QuickSort(int *a,int l,int r)
{
int temp;
int i=l,j=r;
if(l<r)
{
temp=a[l];
while(i!=j)
{
while(j>i&&a[j]>temp) --j;
if(i<j)
{
a[i]=a[j];
++i;
}
while(i<j&&a[i]<temp) ++i;
if(i<j)
{
a[j]=a[i];
--j;
}
}
a[i]=temp;
QuickSort(a,l,i-1);
QuickSort(a,i+1,r);
}
}
int main()
{
int i;
int shuzu[SIZE];
srand(time(NULL));
for(i=0;i<SIZE;i++)
shuzu[i]=rand()/1000+100;
printf("排序前的数组为:\n");
for(i=0;i<SIZE;i++)
printf("%d ",shuzu[i]);
printf("\n");
QuickSort(shuzu,0,SIZE-1);
printf("排序后的数组为:\n");
for(i=0;i<SIZE;i++)
printf("%d ",shuzu[i]);
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: