数据结构算法之快速排序

来源:互联网 发布:2015南京住宅成交数据 编辑:程序博客网 时间:2024/06/03 13:34

快速排序的基本思路是从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;}

0 0
原创粉丝点击