六大经典排序算法(Java版):冒泡、选择、插入、希尔、快速、归并

来源:互联网 发布:淘宝永久封店重新开通 编辑:程序博客网 时间:2024/04/28 07:01
/** * @author Darren * @Date 2016-10-17 */public class Main {        public static void main(String[] args) {        int[] ars = {2, 5, 9, 13, 28, 79, 2, 87};        System.out.println("Original Array:");        myPrintArray(ars);        int[] ars1 = myBubbleSort(ars);        System.out.println("BubbleSort:");        myPrintArray(ars1);        int[] ars2 = myChooseSort(ars);        System.out.println("ChooseSort:");        myPrintArray(ars2);                int[] ars3 = myInsertSort(ars);        System.out.println("InsertSort:");        myPrintArray(ars3);                int[] ars4 = myShellSort(ars);        System.out.println("ShellSort:");        myPrintArray(ars4);                myFastSort(ars, 0,ars.length-1);        System.out.println("FastSort:");        myPrintArray(ars);                int[] ars11 = {2, 5, 9, 87, 28, 79, 2, 13};        myMergeSort(ars11, 0, ars11.length-1);        System.out.println("MergeSort:");        myPrintArray(ars11);    }/** * @param ars the input array */    public static void myPrintArray(int[] ars) {        for(int a: ars) {            System.out.print(a+" ");        }        System.out.println();    }/** * @param ars the input array * @return ars the bubble sorted array */    private static int[] myBubbleSort(int[] ars) {        int i, j, temp;        for(i=0; i<ars.length; i++) {            for(j=ars.length-1; j>i; j--) {                if(ars[j]<ars[j-1]) {                    temp = ars[j];                    ars[j] = ars[j-1];                    ars[j-1] = temp;                }            }        }        return ars;    }/** * @param ars the input array * @return ars the sorted array */    public static int[] myChooseSort(int[] ars) {        int i, j, index, temp;        for(i=0; i<ars.length; i++) {            index = i;            for(j=i+1; j<ars.length; j++) {                if(ars[j]<ars[index]) {                    index = j;                }            }            temp = ars[index];            ars[index] = ars[i];            ars[i] = temp;        }        return ars;    }/** * @param ars the input array * @return ars the sorted array */    public static int[] myInsertSort(int[] ars) {        int i, j, ai;        for(i=1; i<ars.length; i++) {            ai = ars[i];            for(j=i-1; j>=0; j--) {                if(ars[j]>ai) {                    ars[j+1] = ars[j];                }else {                    break;                }            }            ars[j+1] = ai;        }        return ars;    }    /**     * @param ars the input array     * @return ars the sorted array     */    public static int[] myShellSort(int[] ars) {        int i, j, ai, d=1;        while(9*d<ars.length) {            d=3*d+1;        }        while(d>0) {            for(i=d; i<ars.length; i++) {                ai = ars[i];                for(j=i-d; j>=0; j-=d) {                    if(ars[j]>ai) {                        ars[j+d] = ars[j];                    }else {                        break;                    }                }                ars[j+d] = ai;            }            d/=3;        }        return ars;    }/** * @param ars the input array * @param start the start index of ars * @param end the end index of ars * @param basicValue the compared value of fast sorting method * @return ars the sorted array */    public static void myFastSort(int[] ars, int start, int end) {        if(start<end) {            int i=start, j=end, basicValue=ars[start];            while(i<j) {                while(i<j && ars[j]>=basicValue) {  j--;}                if(i<j) {   ars[i] =  ars[j];}                while(i<j && ars[i]<=basicValue) {  i++;}                if(i<j) {   ars[j] = ars[i];}            }            ars[i] = basicValue;            myFastSort(ars, start, i-1);            myFastSort(ars, j+1, end);        }    }/** * @param ars the input array * @param start the start index of ars * @param end the end index of ars * @param middle the middle index of merge sorting method * @return ars the sorted array */    public static void myMergeSort(int[] ars, int start, int end) {        if(start<end) {            int middle = (start+end)/2;            myMergeSort(ars, start, middle);            myMergeSort(ars, middle+1, end);            merge(ars, start, middle, end);        }    }    public static void merge(int[] ars, int start, int middle, int end) {        int i=start, j=middle+1, k=0;        int[] temp = new int[end-start+1];        while(i<=middle && j<=end) {            temp[k++] = ars[i]<=ars[j] ? ars[i++]:ars[j++];        }        if(i<=middle && j>end) {            System.arraycopy(ars, i, ars, start+k, middle-i+1);        }        System.arraycopy(temp, 0, ars, start, k);    }}


0 0
原创粉丝点击