快速排序---心得

以前学习数据结构时没有仔细快速排序,所有又看了一下,写代码实现了一下

以下是一些理解,希望对初学的理解有所帮助

比如以下列数组为例

快速排序:

简单来说就是找个轴点,然后把数据分成两部分,比轴点小的都移到轴点的左边,比轴点数大的数移到右边。这样一来一轮下来的结果就是轴点的左都是小于等于轴点的,右边的就是大于等于轴点的数据,这样之后再对轴点分为两部分,再对两部分分别进行如上的操作,依次类推,分成的模块只有一个元素

1.首先确定一个轴点,声明变量名为pivot

2.然后,将小于轴点的都移到左边,将大于轴点的都移到右边

3.对左右两边分别进行递归,如是操作即可

选择轴点也是一个需要考量的过程,这里只是简单的选取第一个数为pivot

  1. void quickSort(int arr[],int low,int high){
  2. int pivot=arr[low];//以low元素为轴点
  3. //快速排序的核心代码
  4. if(low<high){//递归的条件,
  5. while(low<high){
  6. while(low<high&&pivot<=arr[high]){
  7. high--;
  8. }
  9. swap(arr,low,high);//进行替换,此时pivot的下标为high
  10. while(high>low&&pivot>=arr[low]){
  11.  low++;//
  12. }
  13. swap(arr,low,high);//进行替换,此时pivot的下标又为low
  14. }
  15. //进行递归,递归的结束时条件是low<high不存在
  16. quickSort(arr,low+1,pHigh);
  17. quickSort(arr,pLow,low-1);
  18. }
  19. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值