排序算法——快速排序

5.快速排序

快速排序是对于冒泡排序的升级改进。

   (1)基本思想:

              在每一轮中任意找一个基准元素(一般为该序列的中间元素或者是第一个元素),利用该元素将待排序列分为两个部分,前面部分中的所有元素都比辅助元素小,后面部分中的所有元素都比辅助元素大,再利用快速排序的算法,分别对这两部分进行排序,不断递归,最后得到一个有序的序列。

   (2)快速排序示意图:

 

图解说明:

a.选取 arr[left + right) /2] 元素为基准值

b.分别在从序列的前面找大于等于 pivo的元素,和后面小于等于pivot 的元素,将其交换,使得基准元素的前面的序列中全都是小于它的元素,后面的序列中全部是大于pivot的元素。

c.再分别对于基准元素前面的序列和后面的序列再进行快速排序,进行递归,最终得到排好的完整的序列。

       (3)代码实现:

public void quickSort(int[] arr,int left,int right) {
        int l = left;
        int r = right;
        int pivot = arr[(left + right) / 2];
        int temp = 0; //临时变量,用于交换时
        while( l < r) {
            //从前面找,直到找到大于或者等于 pivot为止
            while(arr[l] < pivot) {
                l++;
            }
            //从后面找,直到找到小于或者等于 pivot为止
            while(arr[r] > pivot) {
                r--;
            }
            if(l >= r) {
                break;
            }
            //找到了,交换
            temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;
            //交换完后,发现arr[l] == privot,则 r--,r前移
            if(arr[l] == pivot){
                r--;
            }
            //交换完后,发现arr[r] == privot,则 l++,l后移
            if(arr[r] == pivot){
                l++;
            }
        }
        if(l == r){
            l += 1;
            r -= 1;
        }
        //向左递归
        if(r > left){
            quickSort(arr,left,r);
        }
        //向右递归
        if(l < right){
            quickSort(arr,l,right);
        }
    }

其他排序算法请转  排序算法——希尔排序_小何小何h的博客-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值