十大排序算法——快速排序

将一列数从左到右从小到大排列。

【基本原理】

选取基准,产生左右标识,左右比基准,满足则换位,排完一次,基准定位,左右递归,直到有序

一、思路

  1. 选定基准值

  1. 将小于基准值的数放在左边

  1. 将大于基准值的数放在右边

  1. 分别对左右序列重复23操作

二、步骤

  1. 设定两个左右游标,取第一个数为基准值

  1. 将右侧游标数(第一个数)与基准值比较 ①大于基准值则 右游标-1 继续比较②小于基准值则将其放到左侧第一个位置

  1. 取左侧游标数与基准值比较①小于基准值 左游标+1 继续比较②大于基准值则将其放到右侧第一个位置

  1. 重复步骤23

动画示例:

三、实现代码

代码如下(示例):

 private static int[] QuickSort(int[] array, int left, int right)
        {
            if (left >= right)//此时递归结束,排序完成
            {
                return array;
            }
            //取第一个数为基准值
            //设定左右游标
            int temp = array[left];
            int templeft = left;
            int tempright = right;
            while (templeft != tempright)//两游标相等时停止
            {               
                while (templeft < tempright && array[tempright] >= temp)//右游标值大于等于基准值则右游标值-1 
                {
                    tempright--;
                }
                array[templeft] = array[tempright];
                while (templeft < tempright && array[templeft] <= temp)//左游标值小于等于基准值则左游标+1
                {
                    templeft++;
                }
                array[tempright] = array[templeft];
            }
            array[templeft] = temp;//此时左右游标值相等,即将基准值放在最后的位置
            //递归,分别对左右序列排序
            QuickSort(array, left, tempright - 1);
            QuickSort(array, templeft + 1, right);
            return array;
        }

注意:templeft < tempright 限定条件,当左游标小于右游标时进行

四、总结

由内向外的结构

第一层找到小于基准值的数放左边,大于基准值的数放右边

第二层(templeft和tempright不相等)时重复第一层,此时分为三部分,左侧小于基准值,右侧大于基准值

第三层运用递归分别对左右序列排序,直至left>=right

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值