栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

双轴快排DualPivotQuicksort

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

双轴快排DualPivotQuicksort

双轴快排

java中Arrays.sort中的排序方法就是双轴快排

public class DualPivotQuicksort {
   public static void sort(Comparable[] arr ,int start , int end){
       if(start >= end)return;
       if(greater(arr[start] , arr[end]) > 0){
           exchange(arr,start,end);
       }
       
       int i = start +1;
       int j = start +1;
       int k = end - 1;
       while (j <= k){
           if(greater(arr[j],arr[start]) < 0){
               exchange(arr, j,i);
               i++;
               j++;
               continue;
           }
           if(greater(arr[j],arr[end]) > 0){
               exchange(arr,j,k);
               k--;
               continue;
           }
           if(greater(arr[j] , arr[start]) >= 0 && greater(arr[j] , arr[end]) <= 0){
               j++;
               continue;
           }
       }
       
       exchange(arr,start,i -1);
       exchange(arr,end,k+1);
       
       sort(arr,start,i-1-1);
       sort(arr,i,k);
       sort(arr,k+1+1,end);
   }
    private static void exchange(Comparable[] a, int i, int j){
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
    private static int greater(Comparable v , Comparable w){
        return v.compareTo( w );
    }
//greater(arr[j],arr[start]) == -1
   //测试代码
   public static void main(String[] args) {
       Integer[] nums = {6,1,7,4,5,2,3,9,1,7,8,2,3};
//       Integer[] nums = {23,7,5,8,0,2,1,43,22,3,9,1,7,8,2,3};
       DualPivotQuicksort.sort(nums,0,12);
//       DualPivotQuicksort.sort(nums,0,15);
       System.out.println(Arrays.toString(nums));
   }
}
  • 排序前
  • 排序后
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678147.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号