一个快速排序的理解

    今天看了个快排,自己通过理解之后用笔算了一下,跟答案比都不一样,原来都在一个地方上面搞错,现在讲代码贴出了给大家看看:

#include #include void improveqsort(int *list,int m,int n){ int i,j,k,t; for(i = 0;i < 7;i++) printf("%7d",list[i]); printf("\n\n"); if(m < n) { i = m;j = n + 1;k = list[m];printf("Key: %d\n",k);while(i < j){ for(i = i + 1;i < n;i++)//左边开始查看比关键字大的值 if(list[i] >= k) break; for(j = j -1;j > m; j--)//右边开始查看比关键字小的值 if(list[j] <= k) break; if(i < j) { t = list[i];list[i] = list[j];list[j] = t; }}//while //跟最后一个比关键字小的值换 t = list[m]; list[m] = list[j]; list[j] = t; improveqsort(list,m,j -1); improveqsort(list,i,n); }//if(m < n)}int main(){ int list[10]; int n = 6,m = 0,i; printf("int put 8 numbers: "); for(i = 0 ;i < 7;i++) scanf("%d",&list[i]); printf("\n"); improveqsort(list,m,n); for(i = 0;i < 7;i++) printf("%7d",list[i]); printf("\n\n"); return 0;}

算法大致思想是这样的:进入快排后,第一个数当做关键字,然后从关键字的右起第一个数从左边往右找第一个比它大的数,记下标为i,跳出循环。同理,从右往左找第一个比关键字小的数,记下标为j,通过下标将这两个数交换。如此循环直到最后i和j相等为止。最后将关键字和最后一个比关键字小的数交换(注意,这点是关键),此时,第一次排序已经完成,然后通过递归将关键字左边和右边的数分别排序。 其实这个算法的思想就是二分法,不理解的朋友可以去查一下二分法的思想。 这是本人的第一次写博客,写不好的敬请谅解,下次再多多努力!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值