您的位置:首页 > 理论基础 > 数据结构算法

数据结构算法之快速排序

2017-03-02 14:29 260 查看
快速排序的基本思路是从n个待排序的记录中任取一个记录,(不妨取第一个元素)设法将该记录放置于排序后他会最终应放的位置。使它前面的记录排序码都小于它的值,是它后面的都大于它的值。然后对前后两部分都重复这个过程。其基本思想是算法中的分治思想。

为了节省空间,可以不另开辟一个新的数组存储区,先将第1个记录暂存,设为想,这样就空出了第一个元素的位置,从第n个元素起找一个排序码不大于x的记录,将它放在第一个位置,这样,后面又空出来一个位置,从第二个元素起找一个排序码大于x的元素,将它放在后面空出的位置,重复这种两边向中间逼近的过程,可以把所有大于x的数放在x的后面。把所有小于x的数放在前面,最后当两边逼近同一位置时,便将暂存的x放于该位置。

对前后两个部分递归使用上述操作,排序即可完成。

附代码如下:#include <stdio.h>
#include <stdlib.h>
void sort(int *a,int low,int hig)
{
int i,j;
if(low<hig)
{
i=low;
j=hig;
a[0]=a[i];
do
{
while(a[j]>a[0]&&i<j)j--;
if(i<j)
{
a[i]=a[j];i++;
}
while(a[i]<a[0]&&i<j)i++;
if(i<j)
{
a[j]=a[i];j--;
}
}while(i!=j);
a[i]=a[0];
sort(a,low,i-1);
sort(a,i+1,hig);
}
}

int main()
{
int i;
int low,hig;
int a[11] = {8,3,10,9,2,4,3,6,8,11,7};

low=1;hig=10;
sort(a,low,hig);
for(i=1;i<=10;i++)
{
printf("%3d",a[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 快速排序