冒泡、选择、插入、快排、归并、希尔排序

冒泡排序

最差时间分析:O(n^2)

平均时间复杂度:O(n^2)

public class BubbleSort_ {

    public static void sort(int array[]){
        int i,j;
        for(i=0;i<array.length-1;i++){
            for(j=i;j<array.length-1;j++){
                if(array[j]>array[j+1]){
                    int temp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;
                }
            }
        }
    }

    public static void print(int array[]){
        for(int i=0;i<array.length;i++){
            System.out.print(array[i]+"\t");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        int []array= new int[]{3, 2, 5, 8, 4, 7, 6, 9};
        print(array);
        sort(array);
        print(array);


    }
}

选择排序

public class SelectSort {
    public static int[] SelectSort(int array[]){
        for(int i=0;i<array.length-1;i++){
            int min=i;
            for(int j=i+1;j<array.length;j++){
                if(array[j]<array[min]){
                    min=j;
                }
            }
            if(i!=min){
                int tmp=array[i];
                array[i]=array[min];
                array[min]=tmp;
            }
        }
        return array;
    }
    public static void print(int array[]){
        for(int index:array){
            System.out.print("\t"+index);
        }
    }
    public static void main(String[] args) {
         int array1[]={3,2,5,8,4,7,6,9};
         System.out.println("排序前:");
         SelectSort.print(array1);
         int array2[]=SelectSort.SelectSort(array1);
         System.out.println("\n排序前:");
         SelectSort.print(array2);
    }
}

插入排序

最差时间分析:O(n^2)

平均时间复杂度:O(n^2)

public class InsertSort_ {
    public static int[] InsertSort(int array[]){
        int point;
        for (int k=1;k<array.length;k++){     //最外轮是需要插入值的次数
            int tmp=array[k];//存放待插入的值
            point=k-1;//
            while(point>-1&&tmp<array[point]){
                array[point+1]=array[point];
                point--;
            }
            array[point+1]=tmp;                     //插入到该插入的位置
        }
        return array;
    }
    public static void print(int array[]){
        for(int i=0;i<array.length;i++){
            System.out.print(array[i]+"\t");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        int []array= new int[]{3, 2, 5, 8, 4, 7, 6, 9};
        print(array);
        InsertSort(array);
        print(array);
    }
}

 

快速排序

最差时间分析:O(n^2)

平均时间复杂度:O(n^2)

public class QuickSort3 {
    public static int Partion(int array[],int left,int right){

        int key=array[left]; //保存要比较的基准值
        while(left<right){
            //从右面开始选一个比基准值大的
            while(left<right&&array[right]>=key){
                --right;
            }
            //找到后放在本次遍历的最左边
            array[left]=array[right];
            //从左面开始找一个比基准值小的
            while(left<right&&array[left]<=key){
                ++left;
            }
            //找到后放在
            array[right]=array[left];
        }
        //将原来存的key基准值放回第一位
        array[left]=key;
        return left;
    }
    //通过二分缩短需要进行查找的宽度
    public static void QuickSort(int array[],int left,int right){
        if(left<right){
            int index=Partion(array,left,right);
            QuickSort(array,left,index-1);
            QuickSort(array,index+1,right);
        }
    }
    public static void main(String[] args) {
        int array[]={3,2,5,8,4,7,6,9};
        System.out.println(Arrays.toString(array));
        QuickSort(array,0,array.length-1);
        System.out.println(Arrays.toString(array));
    }
}

归并排序

最差时间分析:

平均时间复杂度:

public class MergeSort {
    public int[] sort(int []sourceArray){
        int arr[]= Arrays.copyOf(sourceArray,sourceArray.length);
        if(arr.length<2){
            return arr;
        }
        int middle=(int) Math.floor(arr.length/2);
        int left[]=Arrays.copyOfRange(arr,0,middle);
        int right[]=Arrays.copyOfRange(arr,middle,arr.length);
        return merge(sort(left),sort(right));
    }
    protected int [] merge(int []left,int []right){

        int []result=new int[left.length+right.length];
        int i=0;
        while (left.length > 0 && right.length > 0) {
            if(left[0]<=right[0]){
                result[i++]=left[0];
                left=Arrays.copyOfRange(left,1,left.length);
            }else{
                result[i++]=right[0];
                right=Arrays.copyOfRange(right,1,right.length);
            }
        }
        while(left.length>0){
            result[i++]=left[0];
            left=Arrays.copyOfRange(left,1,left.length);
        }
        while(right.length>0){
            result[i++]=right[0];
            right=Arrays.copyOfRange(right,1,right.length);
        }
        return result;
    }

    public static void main(String[] args) {
        int array[]={3,2,5,8,4,7,6,9};
        MergeSort me=new MergeSort();
        int[] array1=me.sort(array);
        for(int temp:array1){
            System.out.print(temp+"\t");
        }
    }

}

希尔排序

平均时间复杂度:nlog(2n)

稳定性:不稳定

public class ShellSort {
    public static void shellsort(int array[]){
        int i,j,step;
        int len=array.length;
        //步长除以2
        for(step=len/2;step>0;step/=2){
            /**
             * 分别对每个数组进行直接插入排序
             */
            for(i=0;i<step;i++){
                for(j=i+step;j<len;j+=step){
                    if(array[j]<array[j-step]){
                        int temp=array[j];
                        int k=j-step;
                        while(k>=0&&array[k]>temp){
                            array[k+step]=array[k];
                            k-=step;
                        }
                        array[k+step]=temp;
                    }
                }
            }
        }
    }
    public static void main(String[] args) {
        int array[]={3,2,5,8,4,7,6,9};
        System.out.println(Arrays.toString(array));
        ShellSort.shellsort(array);
        System.out.println(Arrays.toString(array));
    }
}

 

posted @ 2019-09-05 10:43  _SpringCloud  阅读(3)  评论(0编辑  收藏  举报  来源