美文网首页
工程上对排序的改进,如java 的arrays.sort()

工程上对排序的改进,如java 的arrays.sort()

作者: Mr_Editor | 来源:发表于2020-07-15 23:12 被阅读0次

工程上在进行排序的时候会区分值传递和引用传递,原因是为了保证稳定性:
1.如果是值传递,即基本数据类型,对排序稳定性没要求

  1. 如果是引用传递,即对象类型,排序之前不知道对稳定性有没有要求
  • 工程上对排序的改进的两个方面
  1. 稳定性的考虑

值传递 不关心稳定性 直接利用快排
引用传递 不知道是否需要保证稳定性 利用归并排序

  1. 充分利用O(N*logN)和O(N2)的有优势

快排 (O(N*logN)) + 插入 ,如代码中所示,在进行排序的过程中,如果L - R之间的数据数量不够60个,则会直接使用插入排序(O(N2)),这是因为利用常数项优势,即60的平方并不是很大,再结合快排的调度优势进行优化。

package Algorithm;

public class QuickSort1 {

    void quickSort(int[] arr){
        if(arr==null || arr.length < 2){
            return ;
        }

        process1(arr,0,arr.length -1);

    }

    private void process1(int[] arr, int L, int R) {
        if(L >=R){
            return ;
        }
        
        if(L+60>R){//L .... R 不够60个数
            //直接做L -R上的插入排序 
            return ;
        }
        int M = partition(arr,L ,R);
        process1(arr,L ,M-1);
        process1(arr,M+1,R);
    }

    private int partition(int[] arr, int l, int r) {
        return 0;
    }

}

相关文章

网友评论

      本文标题:工程上对排序的改进,如java 的arrays.sort()

      本文链接:https://www.haomeiwen.com/subject/nrsshktx.html