基本排序算法


public class Sort {

    public static void main(String[] args) {
        int[] arr={6,8,5,4,2,1,0,9,0,7,3};
        int[] tmp = new int[arr.length];
        quickSort(arr,0,arr.length-1);
        for (int i : arr) {
            System.out.print(i+" ");
        }
    }

    private static void quickSort(int[] arr, int left, int right) {
        if(left<right){
            int tmp = quick(arr,left,right);
            quickSort(arr,left,tmp-1);
            quickSort(arr,tmp+1,right);
        }
    }
    private static int quick(int[] arr, int left, int right) {
        int tmp = arr[left];
        while (left<right){
            while (left<right && arr[right]>tmp){
                right--;
            }
            if(left<right){
                arr[left++] = arr[right];
            }
            while (left<right && arr[left]<=tmp){
                left++;
            }
            if(left<right){
                arr[right--] = arr[left];
            }
        }
        arr[left] = tmp;
        return left;
    }

    private static void mergeSort(int[] arr, int low, int high, int[] tmp) {
        if(low<high){
            int mid = (low+high)/2;
            mergeSort(arr,low,mid,tmp);
            mergeSort(arr,mid+1,high,tmp);
            merge(arr,low,mid,high,tmp);
        }
    }

    private static void merge(int[] arr, int low, int mid, int high, int[] tmp) {
        int i=0;
        int j=low,k=mid+1;
        while (j<=mid && k<=high){
            if(arr[j]<arr[k]){
                tmp[i++] = arr[j++];
            }else {
                tmp[i++] = arr[k++];
            }
        }
        while (j<=mid){
            tmp[i++] = arr[j++];
        }
        while (k<=high){
            tmp[i++] = arr[k++];
        }
        for(int t=0;t<i;t++){
            arr[low+t] = tmp[t];
        }
    }

    public static void selectSort(int[] arr, int n){
        if(n<=1) return;
        for(int i=0;i<n;i++){
            int min = i;
            for(int j=i;j<n;j++){
                if(arr[j]<arr[min]){
                    min = j;
                }
            }
            if(min!=i){
                int tmp = arr[i];
                arr[i] = arr[min];
                arr[min] = tmp;
            }
        }
    }

    public static void insertSort(int[] arr, int n){
        if(n<=1) return;
        for(int i=1;i<n;i++){
            int value = arr[i];
            int j=i-1;
            for(;j>=0;j--){
                if(arr[j]>value){
                    arr[j+1] = arr[j];
                }else {
                    break;
                }
            }
            arr[j+1] = value;
        }

    }

    public static void bubbleSort(int[] arr, int n){
        if(n<=1) return;
        for(int i=0;i<n;i++){
            boolean flag = false;
            for(int j=0;j<n-i-1;j++){
                if(arr[j]>arr[j+1]){
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                    flag = true;
                }
            }
            if(!flag){
                break;
            }
        }
    }
}


版权声明:本文为qq_41211642原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。