日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大话数据结构系列之快速排序算法

發布時間:2024/8/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大话数据结构系列之快速排序算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大話數據結構系列之快速排序算法

文章目錄

    • 實現思路
    • 重點知識
    • 代碼實現
    • 優化策略
    • 算法比較
    • 與各位共勉

實現思路

1、屬于冒泡排序的升級版,都是通過不斷的比較和移動交換來實現排序,它的實現,增大了記錄的比較和移動的距離,將關鍵字較大的記錄從前面直接移動到后面,關鍵字較小的記錄從后面直接移動到前面,從而減少了總的比較次數和移動交換次數。

2、通過一趟排序將待記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序的目的。

重點知識

樞軸:
樞軸左邊的值都比它小,右邊的值都比它大

Partition 函數(用來尋找樞軸,進行表劃分):
其實就是將選取的 pivotkey 不斷交換,將比它小的換到它的左邊,比它大的換到它的右邊,它也在交換中不斷更改自己的位置,直到完全滿足這個要求為止。
如果每次 pivotkey 選擇的值都最優,那么遞歸的深度就越淺,那么時間性能就越好

復雜度分析:
空間復雜度為O[nlogn]——O[n]
時間復雜度為 O[nlogn] —— O[n2]

快速排序法的時間復雜度推導過程:


使用數學歸納法進行推導:https://blog.csdn.net/weixin_39966065/article/details/104157850

代碼實現

package com.example.sort; import java.util.Arrays; public class QuickSortTest {public static void main(String[] args){//基礎數據int[] sortList2 = {0,1,4,3,10,9,6,7,8,5,2,20,18,16,11,13,15,14,17,19,12};System.out.println(Arrays.toString(sortList2));quickSort(sortList2);System.out.println(Arrays.toString(sortList2));}public static void quickSort(int[] list){qSort(list,0,list.length-1);}public static void qSort(int[] list, int low, int high){int pivot;if(low < high){pivot = partition(list,low,high);//分別對高低子表進行排序qSort(list,low,pivot-1);qSort(list,pivot+1,high);}}//采用尾遞歸:將遞歸轉換為迭代問題public static void qSort2(int[] list, int low, int high){int pivot;while(low < high){pivot = partition(list,low,high);//分別對高低子表進行排序qSort2(list,low,pivot-1);low = pivot + 1;}}public static int partition(int[] list, int low, int high){int pivotkey;pivotkey = list[low];while(low < high){while( low < high && list[high] >= pivotkey)high--;swap(list,low,high);while( low < high && list[low] <= pivotkey)low++;swap(list,low,high);}return low;}public static int partition1(int[] list, int low, int high){int pivotkey;//優化獲取樞軸 //1//三數取中法:至多增加了3次比較和3次交換指令,而實現了樞軸選取的合理性int m = low + (high - low)/2;if(list[low] > list[high])swap(list,low,high);if(list[m] > list[high])swap(list,high,m);if(list[m] > list[low])swap(list,m,low);pivotkey = list[low];//優化不必要的交換操作 //2//將樞軸值備份到 0 的位置list[0] = pivotkey;while(low < high){while( low < high && list[high] >= pivotkey)high--;list[low] = list[high];//swap(list,low,high);while( low < high && list[low] <= pivotkey)low++;list[high] = list[low];//swap(list,low,high);}list[low] = list[0];return low;}public static void swap(int[] list, int i, int j){int temp = list[i];list[i] = list[j];list[j] = temp;} }

優化策略

1、優化選取樞軸
// 默認代碼中: pivotkey = list[low]; 并不適用于所有的情景(當所有值都倒序或者正序時,獲取的值沒有太大意義)
隨機選擇樞抽的方式更適用于大多數情況,使得獲取的樞軸更合理
三數取中法(median-of-three)
取三個關鍵字先進行排序,將中間數作為樞軸,一般是取左端、右端和中間三個數。

2、優化不必要的交換

3、優化小數組時的排序方案
當 high - low 不大于某個常數時,就可以直接用插入排序(在小數組排序中,性能最好),這樣就能保證最大化地利用兩種排序的優勢來完成工作。

4、使用尾遞歸方式減少遞歸層數

算法比較

1、從最好情況看:
如果你的待排序序列總是基本有序,冒泡排序和直接插入排序更勝一籌。時間復雜度都接近 O[n]

2、從最壞情況看:
堆排序和歸并排序強過快速排序以及其它簡單排序。

3、從平均情況,最好情況,最壞情況,空間復雜度,穩定性來比較

4、從移動次數來比較三種簡單排序

結論 :如果記錄的關鍵字本身信息量比較大(例如:關鍵字都是數十位的數字),此時表明其占用存儲空間很大,這樣移動記錄所花費的時間也越多。

5、為什么綜合各項指標來說,經過優化的快速排序是性能最好的排序算法?
(1)從最壞情況來看,歸并排序比快速排序好
(2)從最好情況看,兩者相當 ?
快速排序:
最好:nlogn | 最壞:n(n-1)/2
(3)從穩定性看,歸并排序具有穩定性
(4)從輔助空間上看,歸并排序比快速排序略次(空間一般都不是問題)
(5)從內存占用上看,無遞歸的歸并排序比快速排序有優勢

待自我論證,使用合適的數據規模
參考文章:https://blog.csdn.net/qq_36770641/article/details/82669788

與各位共勉

數據結構和算法對于程序員的人生來說,那就是兩個圓圈的交集部分,用心去掌握它,你的編程之路將會是坦途。
—— 程杰
You got a dream, you gotta protect it. People can’t do something themselves, they wanna tell you can’t do it. If you want something, go get it, Period.
《當幸福來敲門》

總結

以上是生活随笔為你收集整理的大话数据结构系列之快速排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色人阁婷婷 | 中文天堂在线视频 | 黄色一级带 | 波多野结衣中文字幕一区二区三区 | 国产在线美女 | 最新版天堂资源在线 | 天堂8中文 | 在线岛国| 国产第四页 | 日本福利一区二区三区 | 69xxxx国产| 国产成人三级在线播放 | yjizz国产 | 欧美一区二区三区在线观看 | 国产亚洲黄色片 | 原创少妇半推半就88av | 婷婷成人综合网 | 亚洲av无码一区东京热久久 | 午夜激情在线观看视频 | 久久机热 | 日韩精品中文字幕一区二区三区 | 毛片视频观看 | 一区二区三区国产在线 | 久久亚洲免费 | 少妇25p | 99精品久久久 | 我和单位漂亮少妇激情 | 午夜羞羞影院 | 浪漫樱花在线观看高清动漫 | 亚洲AV无码成人国产精品色 | 亚洲国产成人一区二区 | 色综合天天综合综合国产 | 免费污视频在线观看 | 伊人久久免费 | 成人精品一区二区三区 | 国产日韩av一区二区 | 好吊色一区二区三区 | 毛片网站有哪些 | 成人精品视频在线 | √资源天堂中文在线视频 | 91精品国产高潮对白 | 青青草原国产视频 | 精品国产97 | 免费的毛片网站 | 鲁在线视频 | 国产三级在线免费 | 星空大象mv高清在线观看免费 | 亚洲超碰在线 | 粗了大了 整进去好爽视频 日本女优中文字幕 | 久操视频精品 | 精品日韩制服无码久久久久久 | 我要看18毛片| 久久精品国产免费看久久精品 | 四虎黄色片| 亚洲另类在线观看 | 日韩免费观看一区二区三区 | a毛片在线| 四虎永久免费 | 九九精品在线播放 | 欧洲在线视频 | 人善交videos欧美3d动漫 | 69色堂 | 视频一区二区中文字幕 | 一级肉体全黄毛片 | 少妇高潮毛片色欲ava片 | 日本高清有码 | 久久婷婷久久 | 向日葵视频在线播放 | 成人小视频在线看 | 青青成人网 | 久久久久久久综合 | 百合sm惩罚室羞辱调教 | 国产又黄又大又粗的视频 | 少妇人妻互换不带套 | 99热这里是精品 | 91免费视频国产 | 中文字幕无码av波多野吉衣 | 国产农村妇女毛片精品久久麻豆 | 欧美精品一区二区免费 | 婷婷中文字幕在线 | caopor在线| 97高清国语自产拍 | 人妻丰满熟妇av无码久久洗澡 | 国产精品久久久久一区二区三区 | 中文自拍 | 欧美激情视频网 | 亚洲免费福利视频 | 成人免费性生活视频 | 噼里啪啦高清 | 哈利波特3在线观看免费版英文版 | 成人免费淫片aa视频免费 | 一区二区男女 | 精品无码一区二区三区爱欲 | 亚洲综合成人网 | 人妖被c到高潮欧美gay | 亚洲天堂手机在线观看 | 99热久久这里只有精品 | 国产视频一区二区在线观看 | 中文字幕在线免费视频 |