快速排序

背景介紹: 又稱(chēng)劃分交換排序(partition-exchange sort),一種排序算法,最早由東尼·霍爾提出。在平均狀況下,排序n個(gè)項(xiàng)目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況并不常見(jiàn)。事實(shí)上,快速排序通常明顯比其他Ο(n log n)算法更快,因?yàn)樗膬?nèi)部循環(huán)(inner loop)可以在大部分的架構(gòu)上很有效率地被實(shí)現(xiàn)出來(lái) ----- 來(lái)自 wikipedia **

算法規(guī)則: 本質(zhì)來(lái)說(shuō),快速排序的過(guò)程就是不斷地將無(wú)序元素集遞歸分割,一直到所有的分區(qū)只包含一個(gè)元素為止。
由于快速排序是一種分治算法,我們可以用分治思想將快排分為三個(gè)步驟:
1.分:設(shè)定一個(gè)分割值,并根據(jù)它將數(shù)據(jù)分為兩部分
2.治:分別在兩部分用遞歸的方式,繼續(xù)使用快速排序法
3.合:對(duì)分割的部分排序直到完成

代碼實(shí)現(xiàn)(Java版本)

        public int dividerAndChange(int[] args, int start, int end) 
        {   
            //標(biāo)準(zhǔn)值
            int pivot = args[start];
            while (start < end) {
                // 從右向左尋找,一直找到比參照值還小的數(shù)值,進(jìn)行替換
                // 這里要注意,循環(huán)條件必須是 當(dāng)后面的數(shù) 小于 參照值的時(shí)候
                // 我們才跳出這一層循環(huán)
                while (start < end && args[end] >= pivot)
                    end--;

                if (start < end) {
                    swap(args, start, end);
                    start++;
                }

                // 從左向右尋找,一直找到比參照值還大的數(shù)組,進(jìn)行替換
                while (start < end && args[start] < pivot)
                    start++;

                if (start < end) {
                    swap(args, end, start);
                    end--;
                }
            }

            args[start] = pivot;
            return start;
        }

        public void sort(int[] args, int start, int end) 
        {
            //當(dāng)分治的元素大于1個(gè)的時(shí)候,才有意義
            if ( end - start > 1) {
                int mid = 0;
                mid = dividerAndChange(args, start, end);
                // 對(duì)左部分排序
                sort(args, start, mid);
                // 對(duì)右部分排序
                sort(args, mid + 1, end);
            }
        }

        private void swap(int[] args, int fromIndex, int toIndex) 
        {
            args[fromIndex] = args[toIndex];
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容