亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java實現快速排序過程分析

2024-07-14 08:42:32
字體:
來源:轉載
供稿:網友

快速排序過程

沒有既不浪費空間又可以快一點的排序算法呢?那就是“快速排序”!光聽這個名字是不是就覺得很高端呢。

假設我們現在對“52 39 67 95 70 8 25 52'”這個8個數進行排序。首先在這個序列中隨便找一個數作為基準數(不要被這個名詞嚇到了,就是一個用來參照的數,待會你就知道它用來做啥的了)。為了方便,就讓第一個數70作為基準數吧。接下來,需要將這個序列中所有比基準數大的數放在70的右邊,比基準數小的數放在70的左邊,類似下面這種排列:

 8 25 39 52 52' 67 70 95

在初始狀態下,數字70在序列的第5位。我們的目標是將70挪到序列中間的某個位置,假設這個位置是k?,F在就需要尋找這個k,并且以第k位為分界點,左邊的數都小于等于70,右邊的數都大于等于70。想一想,你有辦法可以做到這點嗎?

基本思想是分治的思想,說到分治,就應該想到和遞歸是分不開的。

有些書上會使用關鍵字比較的表述,有些書上會直接使用記錄比較表述,這兩種說法是兩個維度上的說法。這里序列元素的關鍵字屬于記錄的一部分,為了簡化問題,本文的討論并不區分關鍵字和記錄,代碼實現中使用整數來表示記錄。簡而言之,本文的討論簡化為,對整型數組的快速排序。

通過一趟排序將要排序的記錄分割成兩部分,一部分的關鍵字值比別一部分的所有關鍵字都小,然后再依次對前后兩部分的記錄進行快速排序,遞歸該過程,直到序列中所有記錄都是有序為止。

步驟

1)分解。選擇第一個元素作為基準數,將輸入序列array[m…n]劃分成兩個非空序列array[m…k]和array[k+1…n],使array[m…k]中任一元素的值不大于array[k+1…n]任一元素值。

2)遞歸求解。通過遞歸調用快排算法分別對array[m…k]和array[k+1…n]進行排序

3)合并。由于對分解出的兩個子序列排序都是原地進行的,所以在array[m…k]和array[k+1…n]都排好序后不需要再執行任何計算,就能將array[m…n]排好序。因此這一步是不需要在程序中體現的。

排序過程分析

初始關鍵字:52 39 67 95 70 8 25 52' ,下面將列出每一趟執行的結果。

基準52: 52 39 67 95 70 8 25 52'

基準25: 8 25 39 52 70 95 67 52‘

基準70: 8 25 39 52 52' 67 70 95

基準52‘:8 25 39 52 52' 67 70 95

算法分析

快速排序的時間復雜度與關鍵字初始序列有關。

最壞時間復雜度:O(n^2):

以第一個數或最后一個數為基準時,當初始序列整體或局部有序時,快速排序的性能會下降。若整體有序,此時,每次劃分只能分出一個元素,具有最壞時間復雜度,快速排序將退化成冒泡排序。

最好時間復雜度:

每次選取的基準關鍵字都是待排序列的中間值,也就是說每次劃分可以將序列劃分為長度相等的兩個序列??焖倥判虻倪f歸過程可以用一棵二叉樹來表示,遞歸樹的高度是2為底的對數,每層需要比較的次數是n/2,所以最好時間復雜度是O(n*以2為底n的對數),因為很多時候輸入序列都是亂序的,所以最好時間復雜度也是平均時間復雜度。

三種快排和四種優化方法

三種快排

這里區分的方式是不同基準的選擇方法:

1)固定位置,取第一個或最后一個元素作為基準。這種選取方法不合適局部有序的輸入。

2)隨機選取基準,利用隨機算法,選取待排序序列中任意一個元素作為基準。

3)三數取中,取數列中第一個數,中間位置的數,最后一個數作一個平均值作為基準。

四種優化

1)當排序序列長度分割到一定程度時,使用插入排序

對于N很小或局部有序的數組,直接插入排序的效率非常高。

2)在一次分割結束后,可以把與基準數相等的元素聚在一起,下次分割時忽略掉這些元素。

對于含有重復元素比較多的序列,這種優化方法效果比較好,可以減少很多跌代次數。

具本過程:

第一步:在劃分過程,把與所選取的基準數相等的元素放在數組的兩端。

第二步:劃分結束后,把兩端的與基準數相等的元素移到基準數最終位置的兩側。

3)優化遞歸操作。

4)使用多線程并行處理子劃分。

Partition方法在求TopK問題上的應用

TopK問題即求序列中最大或最小的K個數。這里以求最小K個數為例。

快速排序的思想是使用一個基準元素將數組劃分成兩部分,左側都比基準數小,右側都比基準數大。

給定數組array[low…high],一趟快排劃分后的結果有三種:

1)如果基準數左側元素個數Q剛好是K-1,那么在基準數左側(包含基準數本身),即為TopK的所有元素。

2)如果基準數左側元素個數Q小于K-1,那么說明基準數左側的Q個數都是TopK里的元素,只需要在基準數的右側找出剩下的K-Q個元素即可。問題轉化成了以基準數下標為起點,高位(high)為終點的Top(K-Q)。遞歸下去即可。

3)如果基準數左側元素個數Q大于K-1,說明第K個位置,在基準數的左側,需要縮小搜索范圍,在低位(low)至基準數位置重復遞歸即可,最終問題會轉化成上面兩種情況。

快排java實現

在手寫快排算法時,最好先把一趟排序的過程寫出來。

package sort;public class QuickSort { // 暴露只一個參數的公共接口 public void quickSort(int a[]) { sort(a, 0, a.length - 1); } // 快排算法的真正實現 private void sort(int[] a, int low, int high) { if (low >= high) return; int i = low, j = high; // 設置這兩個變量的目的是為了保持low和high不變 int pivotNum = a[i]; // 基準數 while (i < j) { while (a[j] >= pivotNum && j > i) { // 循環結束的條件有二:一是找到比支點小的數,二是j==i j--; } if (j > i) { // 由于上面循環結束的功能性有兩個,對于找到比支點小的數,即j!=i,要進行位置的交換,下同 a[i] = a[j]; i++; } while (a[i] < pivotNum && i < j) {  i++; } if (i < j) { a[j] = a[i]; j--; } } a[i] = pivotNum; sort(a, low, i - 1); sort(a, i + 1, high); } public static void main(String[] args) { int[] a = { 52, 39, 67, 95, 70, 8, 25, 52 }; new QuickSort().quickSort(a); for (int i : a) { System.out.print(i + " "); } }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美 在线欧美| 欧美一区第一页| 欧美最近摘花xxxx摘花| 亚洲综合一区二区不卡| 国产成人精品免高潮费视频| 久久久精品久久| 欧美性xxxxxxxxx| 亚洲欧美在线一区二区| 欧美日韩国产综合视频在线观看中文| 1769国内精品视频在线播放| 91精品视频在线| 日韩经典中文字幕| 国产91精品高潮白浆喷水| 亚洲最新av在线网站| 欧美国产日韩xxxxx| 日韩电影中文字幕一区| 欧美日韩免费在线| 亚洲精品乱码久久久久久金桔影视| 中文在线资源观看视频网站免费不卡| 久久福利视频导航| 日韩免费看的电影电视剧大全| 亚洲国产高清自拍| 欧美日韩成人在线视频| 久久久久久欧美| 国外视频精品毛片| 亚洲一区二区中文字幕| 亚洲精品99999| 亚洲色图欧美制服丝袜另类第一页| 成人天堂噜噜噜| 国产日韩欧美视频| 91爱爱小视频k| 日韩黄色高清视频| 日韩成人在线电影网| 蜜月aⅴ免费一区二区三区| 亚洲日韩中文字幕在线播放| 97精品国产91久久久久久| 最新69国产成人精品视频免费| 91成人在线视频| 美女国内精品自产拍在线播放| 国产一区二区三区三区在线观看| 欧美日韩国产综合新一区| 国产男人精品视频| 最新日韩中文字幕| 精品人伦一区二区三区蜜桃免费| 亚洲精品国精品久久99热一| 亚洲美女喷白浆| 欧美日韩国产成人在线观看| 亚洲成人免费网站| 福利微拍一区二区| 成人免费看吃奶视频网站| 国产福利精品视频| 亚洲影视九九影院在线观看| 欧美三级xxx| 国产69精品久久久久99| 欧美怡春院一区二区三区| 亚洲自拍偷拍第一页| 高清在线视频日韩欧美| 久久精品国产欧美亚洲人人爽| 日韩免费中文字幕| 亚洲自拍中文字幕| 亚洲最新av网址| 久久韩剧网电视剧| 亚洲国产成人爱av在线播放| 亚洲一区二区免费| 国产欧美中文字幕| 午夜精品久久久久久99热软件| 深夜成人在线观看| 91精品久久久久久久久久另类| 色妞在线综合亚洲欧美| 日本欧美国产在线| 欧美亚洲国产日韩2020| 欧美成人免费一级人片100| 成人在线观看视频网站| 亚洲黄页网在线观看| 欧美激情视频网址| 国产美女直播视频一区| 欧美xxxx做受欧美.88| 国产欧美精品va在线观看| 人人爽久久涩噜噜噜网站| 国产精品久久久久久久久久99| 欧美夫妻性生活xx| 欧美成人免费播放| 色午夜这里只有精品| 国产男女猛烈无遮挡91| 动漫精品一区二区| 亚洲精品日韩在线| 亚洲无限av看| 欧美国产高跟鞋裸体秀xxxhd| 亚洲美女免费精品视频在线观看| 日韩有码片在线观看| 国产精品成人免费视频| 亚洲男人的天堂在线播放| 欧美成人激情视频免费观看| 日韩中文字幕在线视频| 中文字幕一精品亚洲无线一区| 91亚洲国产成人精品性色| 欧美一级淫片播放口| 亚洲精品视频在线观看视频| 中文字幕日韩高清| 中文字幕亚洲无线码在线一区| 欧美电影免费观看网站| 日韩av电影在线网| 亚洲欧美日韩第一区| 国产精品亚洲一区二区三区| 91亚洲精品久久久久久久久久久久| 在线观看日韩www视频免费| 亚洲aⅴ男人的天堂在线观看| 久久免费少妇高潮久久精品99| 在线播放亚洲激情| 亚洲黄色av女优在线观看| 日韩视频第一页| 91中文字幕在线观看| 欧美亚洲午夜视频在线观看| 日韩精品福利网站| 亚洲影视中文字幕| 日韩精品高清在线| 欧美影院成年免费版| 国产日韩换脸av一区在线观看| 久久久女女女女999久久| 在线精品视频视频中文字幕| 国产精品第3页| 日韩av免费观影| 97视频免费在线观看| 亚洲女人初尝黑人巨大| 日韩精品中文字幕视频在线| 欧美精品福利视频| 成人乱人伦精品视频在线观看| 性欧美亚洲xxxx乳在线观看| 国产日韩综合一区二区性色av| 亚洲电影在线看| 亚洲欧美日韩一区二区三区在线| 国产精品无av码在线观看| 69久久夜色精品国产69乱青草| 亚洲成人av片| 久久精品视频网站| 欧美成人黑人xx视频免费观看| 欧美国产亚洲精品久久久8v| 色偷偷偷综合中文字幕;dd| 26uuu日韩精品一区二区| 国产精品入口免费视| 国产成人综合精品在线| 国产成人精品视频在线| www.日韩不卡电影av| 国产精品草莓在线免费观看| 久久久久久久久久久免费精品| 中文字幕av一区中文字幕天堂| 成人天堂噜噜噜| 色妞在线综合亚洲欧美| 91久久久亚洲精品| 伊人久久久久久久久久| 68精品久久久久久欧美| 亚洲人成人99网站| 久久韩剧网电视剧| 欧美高清不卡在线| 欧美成aaa人片在线观看蜜臀| 欧美成人激情视频免费观看| 久久久亚洲成人| 亚洲图片欧美午夜| 国产亚洲精品久久| 日韩美女av在线免费观看| 国产精品日韩电影| 97色在线观看免费视频| 国模私拍一区二区三区| 精品一区精品二区|