java——快排、冒泡、希尔、归并

直接贴代码

快排:

public class Test {
    private static void sort(int[] nums){
        if(nums == null || nums.length == 0){
            return;
        }
        quickSort(nums, 0, nums.length-1);
    }

    private static void quickSort(int[] nums, int start, int end) {
        int low = start;
        int high = end;
        int temp = nums[start];
        while(start<end){
            while (start<end && nums[end]>=temp){
                end--;
            }
            swap(nums, start, end);
            while(start<end && nums[start]<=temp){
                start++;
            }
            swap(nums, start, end);
        }
        if(start-1>low) {
            quickSort(nums, low, start - 1);
        }
        if(high>start+1) {
            quickSort(nums, start + 1, high);
        }
    }

    private static void swap(int[] nums, int i, int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }

    public static void main(String [] args){
        int[] nums = {49,22,34, 6,22,19,3,19};
        sort(nums);
        for(int i=0;i<nums.length;i++){
            System.out.print(nums[i]+“ ”);
        }

    }
}

 冒泡:

private static void bubbleSort(int[] num){
        for(int i = 0 ; i < num.length ; i ++) {
            for(int j = 0 ; j < num.length - i - 1 ; j ++){
                if(num[j]>num[j+1]){
                    swap(num, j , j+1);
                }
            }
        }
    }

改进冒泡:

public void bubbleSort(int arr[]) {
    boolean didSwap;
    for(int i = 0, len = arr.length; i < len - 1; i++) {
        didSwap = false;
        for(int j = 0; j < len - i - 1; j++) {
            if(arr[j + 1] < arr[j]) {
                swap(arr, j, j + 1);
                didSwap = true;
            }
        }
        if(didSwap == false)
            return;
    }    
}

改进后的冒泡排序最佳情况下时间复杂度为O(n)

 希尔排序:

    private static void shellSort(int[] nums){
        for(int d = nums.length/2 ; d > 0 ; d = d / 2){
            for(int i = d ; i < nums.length ; i ++){
                for(int j = i; j>=d; j = j-d){
                    if (nums[j] < nums[j - d]) {
                        swap(nums, j - d, j);
                    }else{
                        break;
                    }
                }
            }
        }
    }

 

 归并排序:

    private static void mergeSort(int[] nums, int low, int high){
        if(low>=high){
            return;
        }
        int mid = (low+high)/2;
        mergeSort(nums, low, mid);
        mergeSort(nums, mid + 1, high);
        merge(nums,low, mid, high);
    }

    private static void merge(int[] nums, int low, int mid, int high){
        int[] temp = new int[high-low+1];
        int i = low;
        int j = mid+1;
        int k = 0;
        while(i<=mid&&j<=high){
            if(nums[i]<nums[j]){
                temp[k++] = nums[i++];
            }else{
                temp[k++] = nums[j++];
            }
        }
        while(i<=mid){
            temp[k++] = nums[i++];
        }
        while(j<=high){
            temp[k++] = nums[j++];
        }
        for(int p = 0 ; p < temp.length ; p++){
            nums[low+p] = temp[p];
        }
    }

 

posted @ 2019-03-01 09:08  高圈圈  阅读(234)  评论(0编辑  收藏  举报