快速排序&歸併排序

快速排序

時間複雜度

O(nlogn) 空間複雜度O(logn) 不穩定 ui

時間複雜度:
最壞O(n^2) 當劃分不均勻時候 逆序and排好序都是最壞狀況
最好O(n) 當劃分均勻
partition的時間複雜度: O(n)一共須要logn次partitioncode

代碼

public class quickSort {
    public static void sort(int[] array, int start, int end) {
        if (start < end) {
            int p = partition(array, start, end);
            sort(array, start, p - 1);
            sort(array, p + 1, end);
        }
    }
    public static int partition(int[] A, int start, int end) {
        int left = start;
        int right = end;
        int pivot = A[start];
        while (left < right) {
            while (left < right && A[right]> pivot) {
                right--;
            }
            while (left < right && A[left] <= pivot) {
                left++;
            }
            swap(A, left, right);
        }
        swap(A, start, left);
        return left;
    }
    public static void swap(int[] A, int i, int j) {
        int tem = A[i];
        A[i] = A[j];
        A[j] = tem; 
    }
    public static void main(String[] args) {
        int array[] = {8,7,1,6,5,4,3,2};
       quickSort s = new quickSort();
       s.sort(array, 0, 7);
        for(int i=0;i<array.length;i++){
             System. out.println("output " + array[i]);
       }
    }
}

歸併排序

時間複雜度

時間複雜度 O(nlogn), 空間複雜度O(n) +O(logn)
排序時間與輸入無關,最佳狀況,最壞狀況都是如此, 穩定。排序

代碼

public class MergeSort {it

public static void sort(int[] A, int start, int end) {
    if (start >= end) {
        return;
    }
    int mid = (start + end) / 2;
    sort(A, start, mid);
    sort(A, mid + 1, end);
    merge(A, start, mid, end);
}
public static void merge(int[] A, int start, int mid, int end) {
    int[] helper = new int[A.length];
    for (int i = start; i <= end; i++) {
        helper[i] = A[i];
    }
    int i = start, j = mid + 1;
    for (int k = start; k <= end; k++) {
        if (i > mid) {
            A[k]= helper[j++]; 
        } else if (j > end) {
            A[k]= helper[i++]; 
        } else if (helper[i]> helper[j]) {
            A[k]= helper[j++]; 
        } else {
            A[k]= helper[i++]; 
        }
    }
}
public static void main(String[] args) {
   int array[] = {8,7,1,6,5,4,3,2};
   MergeSort s = new MergeSort();
   s.sort(array, 0, 7);
    for(int i=0;i<array.length;i++){
         System. out.println("output " + array[i]);
    }
}

}io

相關文章
相關標籤/搜索