java 排序算法小节 直接插入排序 冒泡排序 选择性排序 快速排序 归并排序

public class Mainx {
    /**
     * 交换数组内的两个数据
     * @param array
     * @param i
     * @param j
     */
    public static void swap(int array[],int i,int j){
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    /**
     * 直接插入排序
     * @param array
     * @param start
     * @param end
     */
    public static void directInsertSort(int array[],int start,int end){
        if(start >= end){
            return;
        }
        for(int i=1;i<=end;i++){
            for(int j=i;j>0;j--){
                if(array[j-1] > array[j]){
                    int temp = array[j];
                    array[j] = array[j-1];
                    array[j-1] = temp;
                }
            }
        }
    }
    /**
     * 冒泡排序
     * @param array
     * @param len
     */
    public static void bubbleSort(int array[],int len){
        if(len <= 1){
            return;
        }
        for(int i=0;i<len;i++){
            for(int j=0;j<len-i-1;j++){
                if(array[j] > array[j+1]){
                    swap(array,j,j+1);
                }
            }
        }
    }
    /**
     * 选择性排序
     * @param array
     * @param len
     */
    public static void selectSort(int array[],int len){
        if(array==null || len <= 1){
            return;
        }
        for(int i=0;i<len;i++){
            for(int j=i+1;j<len;j++){
                if(array[i] > array[j]){
                    swap(array,i,j);
                }
            }
        }
    }
    /**
     * 快速排序
     * @param array
     * @param start
     * @param end
     */
    public static void quickSort(int array[],int start,int end){
        if(start >= end){
            return;
        }
        int flag = array[start];
        int i = start,j = end;
        while(i < j){
            while(i<j && array[j]>=flag){
                j--;
            }
            array[i] = array[j];
            while(i<j && array[i]<=flag){
                i++;
            }
            array[j] = array[i];
        }
        array[i] = flag;
        quickSort(array,start,i-1);
        quickSort(array,i+1,end);
    }
    /**
     * 合并数组
     * @param array
     * @param s1
     * @param e1
     * @param s2
     * @param e2
     */
    public static void subMergSort(int array[],int s1,int e1,int s2,int e2){
        int temp[] = new int[array.length];
        int start=s1,end=e2;
        int index = s1;
        while(s1<=e1 && s2<=e2){
            if(array[s1] > array[s2]){
                temp[index++] = array[s2++];
            }else{
                temp[index++] = array[s1++];
            }
        }
        while(s1 <= e1){
            temp[index++] = array[s1++];
        }
        while(s2 <= e2){
            temp[index++] = array[s2++];
        }
        for(int i=start;i<=end;i++){
            array[i] = temp[i];
        }
        print(array);
        temp = null;
    }
    /**
     * 归并排序
     * @param array
     * @param start
     * @param end
     */
    public static void mergeSort(int array[],int start,int end){
        if(start >= end){
            return;
        }
        int mid = (start+end)/2;
        mergeSort(array,start,mid);
        mergeSort(array,mid+1,end);
        subMergSort(array,start,mid,mid+1,end);
    }
    public static void print(int array[]){
        for(int i=0;i<array.length;i++){
            System.out.print(array[i] + " ");
        }
        System.out.println();
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int array[] = new int[]{8,7,6,5,4,3,2,1};
        //directInsertSort(array,0,array.length-1);
        //bubbleSort(array,array.length);
        //selectSort(array,array.length);
        //quickSort(array,0,array.length-1);
        
        //subMergSort(array,0,3,4,7);
        mergeSort(array,0,7);
        print(array);
    }

}

猜你喜欢

转载自blog.csdn.net/ysh126/article/details/52451593