快速排序

作者:李慧芹,华清远见嵌入式学院讲师。

快速排序实质上是对“冒泡排序”的一种改进,整个排序过程可概括为:通过N趟的排序将原本的排序数据分为若干块进行分块排序,而在每趟排序过程中,以指定的关键字将待排数据分别分为比关键字大的部分和比关键字小的部分,反复上述过程,将整个待排数列分散为若干个小数列而分别进行排序操作。假设我们现对一列数进行快速排序,其C语言代码实现如下:

#include <stdio.h>
        int partition(int *data,int low,int high)
        {       int t = 0;
                t = data[low];
                while(low < high)
                {       while(low < high && data[high] >= t)
                                high--;
                        data[low] = data[high];
                        while(low < high && data[low] <= t)
                                low++;
                        data[high] = data[low];
                }
                data[low] = t;
                return low;
        }

void sort(int *data,int low,int high)        //快排每趟进行时的枢轴要重新确定,由此进 //一步确定每个待排小记录的low及high的值
        {       if(low >= high)
                        return ;
                int pivotloc = 0;
                pivotloc = partition(data,low,high);
                sort(data,low,pivotloc-1);
                sort(data,pivotloc+1,high);
        }
        void quick_sort(int *data,int n)         //该函数进行sort过程的调用
        {         sort(data,0,n-1); }

int main()
        {       int i;
                int data[]={49,38,32,98,65,74,12,8};
                quick_sort(data,sizeof(data)/sizeof(int));
                for( i = 0 ; i < sizeof(data)/sizeof(int); i++)
                printf("%d ",data[i]);
                printf("/n");
                return 0;
        }

如果您喜欢这篇文章,可以加华清远见老师为好友,单击以下链接即可:

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值