zoukankan      html  css  js  c++  java
  • java 希尔排序 归并排序 快速排序 三路快速排序

    package demo;
    
    import unit.Unit;
    
    public class Three extends Abs {
        public void sort() {
            Unit ss = new Unit();
            int[] ar = ss.genRandomArray(10000,1000);
            for(int i=0; i<ar.length; i++){
                System.out.print(" "+ar[i]);
            }
            System.out.println(" ");
            double gap = ar.length;//增量长度
            int dk,sentinel,k;
            while(true){
                gap = (int)Math.ceil(gap/2);//逐渐减小增量长度
                dk = (int)gap;//确定增量长度
                for(int i=0;i<dk;i++){
                    //用增量将序列分割,分别进行直接插入排序。随着增量变小为1,最后整体进行直接插入排序
                    for(int j=i+dk;j<ar.length;j = j+dk){
                        k = j-dk;
                        sentinel = ar[j];
                        while(k>=0 && sentinel<ar[k]){
                            ar[k+dk] = ar[k];
                            k = k-dk;
                        }
                        ar[k+dk] = sentinel;
                    }
                }
                //当dk为1的时候,整体进行直接插入排序
                if(dk==1){
                    break;
                }
            }
            for(int i=0; i<ar.length; i++){
                System.out.print(" "+ar[i]);
            }
        }
    }
    

      java实现归并排序法

    package demo;
    
    import unit.Unit;
    
    public class Five extends Abs {
    
        @Override
        public void sort() {
            Unit ss = new Unit();
            int[] ar = ss.genRandomArray(1000000,1000000);
            for(int i=0; i<ar.length; i++){
                System.out.print(" "+ar[i]);
            }
            System.out.println("dddddddddddddddddddddddd ");
            mergeSort(ar,0,ar.length-1);
            for(int i=0; i<ar.length; i++){
                System.out.print(" "+ar[i]);
            }
        }
    
        private void mergeSort(int[] arr,int l ,int r){
            if(l>=r){
                return;
            }
            int mid = (l+r)/2;
            mergeSort(arr,l,mid);
            mergeSort(arr,mid+1,r);
            if(arr[mid]>arr[mid+1]){
                merge(arr,l,mid,r);
            }
        }
    
        private void merge(int[] arr,int l ,int mid ,int r){
            int[] aux = new int[r-l+1];
            for(int i=l; i<=r; i++){
                aux[i-l]=arr[i];
            }
            int i =l,j=mid+1;
            for( int k=l ; k<=r ; k++){
                //先判断索引的合法性
                if( i>mid ){
                    arr[k] = aux[j-l];
                    j ++;
                }else if(j > r){
                    arr[k] = aux[i-l];
                    i++;
                }
                //对分成两边的数组进行比较 那个比较大就放入新的aux数组中
                else if( aux[i-l] < aux[j-l] ){
                    arr[k] = aux[i-l];
                    i++;
                }else{
                    arr[k] = aux[j-l];
                    j++;
                }
            }
        }
    }

     快速排序

    package demo;
    
    import unit.Unit;
    
    import java.util.Random;
    
    public class Six extends Abs {
        @Override
        public void sort() {
            Unit ss = new Unit();
            int[] ar = ss.genRandomArray(100,0);
            for(int i=0; i<ar.length; i++){
                System.out.print(" "+ar[i]);
            }
            System.out.println("ddddddddddddddddddddddddd ");
            quitSort(ar,0,ar.length-1);
            for(int i=0; i<ar.length; i++){
                System.out.print(" "+ar[i]);
            }
        }
    
        private void quitSort(int[] arr,int l,int r) {
            if(l >= r){
                return;
            }
            int p = partition(arr,l,r);
            quitSort(arr, l,p-1);
            quitSort(arr,p+1,r);
        }
    
        private int partition(int[] arr,int l,int r){
            int k = new Random().nextInt(r-l);
            k = k + l;
            swap(arr,l+1,k);
            int v = arr[l];
            int j = l;
            for(int i= l+1; i<=r;i++){
                if(arr[i]<v){
                    swap(arr,j+1,i);
                    j++;
                }
            }
            swap(arr,j,l);
            return j;
        }
    
        private void swap(int[] arr, int j,int l){
            int tempF ;
            tempF = arr[j];
            arr[j] = arr[l];
            arr[l] = tempF;
        }
    }

     三路排序

    package demo;
    
    import unit.Unit;
    
    import java.util.Random;
    
    public class Eight extends Abs {
        @Override
        public void sort() {
            Unit ss = new Unit();
            int[] ar = ss.genRandomArray(10000,0);
            for(int i=0; i<ar.length; i++){
                System.out.print(" "+ar[i]);
            }
            System.out.println("ddddddddddddddddddddddddd ");
            quitSortThree(ar,ar.length);
            for(int i=0; i<ar.length; i++){
                System.out.print(" "+ar[i]);
            }
        }
    
        private void quitSortThree(int[] arr,int n) {
            quitSortThreeWays(arr,0,n-1);
        }
    
        private void quitSortThreeWays(int[] arr,int l,int r){
            if(l >= r){
                return;
            }
    
            int k = new Random().nextInt(r-l);
            k = k + l;
            swap(arr,l+1,k);
            int v = arr[l];
    
            int lt = l;
            int gt = r + 1;
            int i = l+1;
    
            while(i<gt){
                if(arr[i]<v){
                    swap(arr,i,lt+1);
                    lt++;
                    i++;
                }else if(arr[i] > v){
                    swap(arr,i,gt-1);
                    gt --;
                }else{
                    i++;
                }
            }
            swap(arr,l,lt);
            quitSortThreeWays(arr,l,lt-1);
            quitSortThreeWays(arr,gt,r);
        }
    
        private void swap(int[] arr, int j,int l){
            int tempF ;
            tempF = arr[j];
            arr[j] = arr[l];
            arr[l] = tempF;
        }
    }
    

      

  • 相关阅读:
    a<<=n
    IP地址转换、主机大小端、htonl、ntohl实现
    判断系统大小端方法分析与总结
    C++ 初始化列表(转载)
    QString::arg()//用字符串变量参数依次替代字符串中最小数值
    QTableView和QTableWidget翻页功能实现
    QTableWidget详解(样式、右键菜单、表头塌陷、多选等)
    QT CLASS
    Linux下添加新硬盘,分区及挂载
    c语言基本函数
  • 原文地址:https://www.cnblogs.com/smallteeth/p/9984077.html
Copyright © 2011-2022 走看看