Java排序算法——快速排序

快速排序
基本思想:任取待定排序序列中的某個元素作爲標準(一般取第一個元素),通過一次劃分,將待排元素分爲左右兩個子序列,左子序列中元素小於基準元素,右子序列大於或等於基準元素,然後對兩個子序列繼續進行劃分,直至每一個序列只有一個元素爲止。
時間效率:O(log2(n+1))
空間效率:O(nlog2n)
算法穩定性:不穩定

//快速排序
public class Sort_f {
    private void fastSort(int nums[],int start,int end){
        if(start<end){
            int i = start;//左指針
            int j = end;//右指針
            int key = nums[start];//關鍵元素(用來比較的元素)
            while(i<j){
                while(i<end && nums[++i]<key);//找到一個左邊大於關鍵元素的數組元素
                while(j>end && nums[j]>key)j--;//找到一個右邊小於關鍵元素的數組元素

                if(i<j){
                    swap(nums,i,j);
                }
            }
            //遞歸
            swap(nums,start,j);
            fastSort(nums,start,i-1);
            fastSort(nums,j+1,end);
        }

    }
    //交換函數
    private 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[]={7,4,6,5,4,4,3,2,1};
        Sort_f test = new Sort_f();
        int length = nums.length;
        test.fastSort(nums,0,length-1);
        System.out.println(java.util.Arrays.toString(nums));

    }
}
發佈了42 篇原創文章 · 獲贊 2 · 訪問量 8883
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章