快速排序算法

1.快速排序分解

数组A[l,r]被划分为俩个(可能为空)的子数组A[p,q-1],A[q+1,r],使得A[p,q-1]的每一个元素都小于A[q],A[q+1,r]中每个元素都大于A[q],其中计算下标q也是规划的一部分。

2.解决

通过调用快速排算法,分别对子数组A[p,q-1],A[q+1,r]进行排序。

3.合并

因为子数组都是原址排序,所以不需要合并操作,数组A[l,r]已经有序。

4.代码

    public static void quickSort(int[] arr,int left,int right){
        if(left < right){
            int p  = partition(arr,left,right);
            quickSort(arr,left,p-1);
            quickSort(arr,p+1,right);
        }
    }


    public static int partition(int[] arr,int left,int right){
        int p = arr[right];
        int i = left -1;
        for(int j = left;j<= right-1;j++){
            if(arr[j]<=p){
                i = i+1;
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
        }
        int t2 = arr[i+1];
        arr[i+1] = arr[right];
        arr[right] = t2;
        return i+1;
    }

5.性能

快速排序大多数情况时间复杂度为O(nlogn),最坏情况下是有序时时间复杂度为O(n2),空间复杂度为O(n)。

posted @ 2025-07-19 11:08  我刀呢?  阅读(10)  评论(0)    收藏  举报