快速排序(升序)

        将待排序元素取出来,定义两个数字,分别指向序列的首尾;从后往前找小于待排序元素的元素,将它放到首数字指针指向的位置,首指针往后移一位;再从前往后找大于待排序元素的元素,将它放到尾数字指针指向的位置,尾指针向前移一位;如此反复,知道首尾指针相等,则此位置就是待排序元素的最终位置,它的左边都小于等于它自己;它的右边都是大于等于它自己的元素。

        再次用上述相同的方法处理左右两个序列,则最终可得到有序的序列。

        快速排序的方法就是将比待排元素大的放在它的右边,小的放左边,以此类推,则最终该序列就是有序序列。

void kuaipai(int[] nums, int low, int high) {
        int begin = low, end = high;        //定义两个指向下标收尾的数字
        int temp = nums[begin];        //将第一个元素拿出来,定为待排序元素
        while (begin < end) {        //遍历整个序列
            while (begin < end && nums[end] > temp) {        //从后往前寻找序列中小于待排序元素的元素,若没有,则end减1
                end --;
            }
            if (begin < end) {        //若结束上边循环的条件是nums[end] <= temp,即找到了比待排序元素小的元素
                nums[begin] = nums[end];        //则将找到的元素放到begin指向的位置
                begin ++;        //begin向后移一位
            }
            while (begin < end && nums[begin] < temp) {        //从前往后寻找序列中大于待排序元素的元素,若没有,则begin加1
                begin ++;
            }
            if (begin < end) {        //若结束上边循环的条件是nums[begin] >= temp,即找到了比待排序元素大的元素
                nums[end] = nums[begin];        //则将找到的元素放到end指向的位置
                end --;        //end减1
            }
        }
        nums[begin] = temp;        //循环遍历完后,即begin=end时,则待排序元素位置即为begin和end指向的元素序列位置
        if (low < begin) {        //上边的待排序元素将序列分为左边小于待排序元素,右边大于待排序元素,则low到begin-1为小于temp的序列
            kuaipai(nums, low, begin - 1);
        }
        if (high > end) {        //high+1到end为大于temp的序列,调用递归
            kuaipai(nums, end + 1, high);
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值