花几分钟轻松搞定快速排序算法

这里写图片描述

//快速排速算法,使用迭代 array待排序的数组, s是数组的首索引,t是最后一个元素索引
void QuickSort(int[] array, int s, int t)
{
      //定义变量保存被排序的数组索引
      int i = s, j = t;
       //一个元素就没有必要排序了吧,所以索引s必须小于t
      if(s < t)
      {
          //开始默认数组第一个记录做了基准点
          //什么意思呢,就是我们这个做为一个点,让其左边的都小于他,右边都大于他
          int temp = array[i];

          //开始两端扫描比较大小
          while(i != j) //只要i!=j  说明我们两端扫描就还没完
          {
              while(j >= i) //开启从右端到左边的扫描
              {
                   if(array[j] > temp)
                   {
                       //开始左移动下标
                       j--;
                   }
                   else
                   {
                     //那么需要移动当前基准点到当前比较的元素对应的索引处
                     //我们把j索引对应的元素移动到了i处,那么j处就空了一个位置
                     array[i] = array[j];               
                     break;
                   }    
              }

              //开始找大的填到j里          
              while(i < j) //开启从左边到右边的扫描
              {
                  if(array[i] < temp)
                  {
                      i++;  //移动到下个元素
                  }else
                  {
                    //说明找到了比基准元素大的,那么我们就把当前这个大的数移动到上次留下的坑
                      array[j] = array[i];
                      break;  //并且要结束循环
                  }
              }
          }
      }

      //执行到这来说明i == j了,说明我们扫描已经到了一个元素了那么这个元素肯定是空的
      array[i] = temp;  

      //现在我们已经把基准点放在了正确位置,因为这个时候左边的全部小于他,右边的全部大于他
      //既然这个数搞定了,那么我们现在来排序这个数的两侧,我们用递归把,性质相同
      //左边递归
      QuickSort(array,s,j - 1);
      //右边递归
      QuickSort(array,j + 1,t);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛掰是怎么形成的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值