java 快速排序及优化

原理

要求:使用快速排序将 list [2, 2, 3, 1, 5, 7, 4, 6, 9, 8] 数组从小到大排序

在数组中选取第一个值 list[0] 作为枢轴,以此为基准,将大于此值的其他元素放在后半部分,小于此值的元素放在前半部分。

比如,选取 list[0]=2 为枢轴,开始排序,2个索引,一个指向末,一个指向头,从头和尾向中间靠拢。当2个索引值不符合条件时2个索引位置的值交换,当2个索引重合时结束。

先从末端逆向遍历
list[9]=8 >2, 保持不变;
list[8]=9>2, 保持不变;
以此类推…
当list[3]=1<2,list[0] 与list[3] 进行交换,此时list[0]=1,list[3]=2,然后改为从头顺向遍历,
list[0]=1<2,保持不变;
list[1]=2 <= 2,保持不变;
list[2]=3>2,将list[2]=3 与 list[3]=2进行交换,再改为逆向遍历,发现索引重合,至此结束。

那么进行一次排序之后就是
[1, 2, 2, 3, 5, 7, 4, 6, 9, 8]
以2为分界线,前半部分小数组[1,2]都小于等于2(这里还是list这个数组,只是这个小数组遍历的时候是list数组的0–1),后半部分小数组[3,5,7,4,6,9,8]都大于等于2(同理,是list数组的3~9),然后将小数组重复上述步骤,直至排序完成。

QuickSort代码实现

 public static void Qsort(int[] list, int low, int high) {
   
//      用来记录枢轴的位置
        int pivot;

        if (low < high) {
   
//       寻找pivot的位置,在寻找过程中已排序
            pivot = partition(list, low, high);
//递归调用,即将小数组进行快速排序,第一个是前半部分的小数组,
//第二个是后半部分的小数组
            Qsort(list, low, pivot - 1);
            Qsort(list, pivot + 1, high);
        }

    }
//=================================================================

     //    数组值交换函数
    public static void swap(int[] list, int low, int high) {
   
        int temp = list[low];
        list[low] = list[high];
        list[high] = temp;
    }

//=================================================================

    private static int partition(int
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值