色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言排序中快速排序的技巧

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-07-29 15:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況并不常見。事實上,快速排序通常明顯比其他Ο(n log n) 算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來。

算法步驟:

1 從數列中挑出一個元素,稱為 “基準”(pivot)。

2 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數可以到任一邊)。在這個分區退出之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作。

3 遞歸(recursive)的把小于基準值元素的子數列和大于基準值元素的子數列排序。

遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,但是這個算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。

C代碼的實現如下:

613a930c-edfd-11eb-a97a-12bb97331649.png

下面開始單步分析,這里用一個數組的數據來分析

6155b786-edfd-11eb-a97a-12bb97331649.png

首先將0作為比較的基準,由于右邊所有的數據都比0大,所以數據不做 移動。接下來將8作為比較基準,從最右邊開始和8比較。此時6比8小,將6移動到8前面,其他數據依次后移。

6170fe9c-edfd-11eb-a97a-12bb97331649.png

接著在將2和8比較,2比8小,繼續將2移動到8前面,其他的數據依次后移。

618a70ac-edfd-11eb-a97a-12bb97331649.png

這樣將8小的數據移動到8的前面,比8大的數據在8后面保持不變。移動完成后如下:

61a3b332-edfd-11eb-a97a-12bb97331649.png

接下來比較的基準變為數字6,將比6小的數據移動到6前面。從最右邊開始查找,找到1比6小,將1移動到6前面。

61bf9af2-edfd-11eb-a97a-12bb97331649.png

然后繼續依次尋找比6小的數字,移動到6的前面,移動完成后如下:

61d63dde-edfd-11eb-a97a-12bb97331649.png

然后比較的基準變為數字5,從最右邊開始尋找比5小的數移動到5前面。查找到的數據為2。

61f18e0e-edfd-11eb-a97a-12bb97331649.png

依次查找其他比5小的數據,移動完成后如下:

620c66ac-edfd-11eb-a97a-12bb97331649.png

到這里可以看到數據排序已經完成了。整體運行流程如下:

下面測試一下最壞情況下的排序情況

62398f06-edfd-11eb-a97a-12bb97331649.png

可以看到最壞情況下排序的次數并沒有增多,反而感覺還減少了。在看一下最好情況下的排序情況:

62dcc02c-edfd-11eb-a97a-12bb97331649.png

最好情況下數據也要進行比較9次。

6322e912-edfd-11eb-a97a-12bb97331649.png

下來隨機生成一個包含10000個數字的數組,測試下執行時間。

可以看到對10000個數字排序需要的時間為120ms。

634a06aa-edfd-11eb-a97a-12bb97331649.png

另外,對現在我們的大多數朋友來說還是學編程技術最重要!栽一棵樹最好的時間是十年前,其次是現在。對于準備學習編程的小伙伴,如果你想更好的提升你的編程核心能力(內功)不妨從現在開始!

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7632

    瀏覽量

    141941

原文標題:【數據結構】C語言排序方法——快速排序詳解!

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    國際首創新突破!中國團隊以存算一體排序架構攻克智能硬件加速難題

    2025 年 6 月 25 日,北京大學團隊在智能計算硬件方面取得領先突破,國際上首次實現了基于存算一體技術的高效排序硬件架構 (A fast and reconfigurable
    的頭像 發表于 07-02 16:50 ?237次閱讀
    國際首創新突破!中國團隊以存算一體<b class='flag-5'>排序</b>架構攻克智能硬件加速難題

    Analog Devices Inc. MAX16895 監控電路特性/應用/功能圖

    Analog Devices MAX16895監控電路是小型、低功耗、電壓監控電路,具有排序功能。這些器件具有可調的、低至0.5V的電壓監控閾值,并可利用外部電容調節延遲時間。這些Analog Devices器件非常適合用于電源排序、復位
    的頭像 發表于 06-26 09:34 ?139次閱讀
    Analog Devices Inc. MAX16895 監控電路特性/應用/功能圖

    低成本電源排序器解決方案

    絕大多數負載點DC-DC轉換器可以將上一個轉換器的電源就緒輸出連接至下一個轉換器的使能輸入,實現上電排序。這種方法只適合比較簡單的設計,不能滿足多數現代微處理器和DSP的要求一這類器件要求斷電順序必須與上電順序相反。許多廠商針對這類應用推出了可編程排序IC,但器件價格較為
    的頭像 發表于 05-21 09:55 ?560次閱讀
    低成本電源<b class='flag-5'>排序</b>器解決方案

    深入理解C語言C語言循環控制

    C語言編程,循環結構是至關重要的,它可以讓程序重復執行特定的代碼塊,從而提高編程效率。然而,為了避免程序進入無限循環,C語言提供了多種循
    的頭像 發表于 04-29 18:49 ?1188次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環控制

    51單片機C語言學習筆記

    c51語言快速入門
    發表于 03-24 14:04 ?3次下載

    詳解Linux sort命令之掌握排序技巧與實用案例

    在linux系統使用過程,提供了sort排序命令,支持常用的排序功能。 常用參數 sort命令支持很多參數,常用參數如下: ? 短參數 長參數 說明 -n – number-sort 按字符串數值
    的頭像 發表于 01-09 10:10 ?954次閱讀

    TimSort:一個在標準函數庫中廣泛使用的排序算法

    在計算機科學的領域,排序算法是每位學生必學的基礎,而排序的需求是每位程序員在編程過程中都會遇到的。 在你輕松調用 .sort() 方法對數據進行排序時,是否曾好奇過,這個簡單的方法背后使用的是哪種
    的頭像 發表于 01-03 11:42 ?593次閱讀

    解讀版|Air780E軟件C語言內存數組的神秘面紗!

    今天我們來揭開Air780E 軟件 C 語言內存數組的神秘面紗,希望有所收獲。
    的頭像 發表于 11-17 10:00 ?671次閱讀
    解讀版|Air780E軟件<b class='flag-5'>中</b><b class='flag-5'>C</b><b class='flag-5'>語言</b>內存數組的神秘面紗!

    C語言C++結構體的區別

    同樣是結構體,看看在C語言C++中有什么區別?
    的頭像 發表于 10-30 15:11 ?793次閱讀

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C
    的頭像 發表于 10-29 17:31 ?1104次閱讀

    C語言與其他編程語言的比較

    C語言作為一種歷史悠久的編程語言,自其誕生以來,一直在軟件開發領域扮演著重要角色。它以其高效、靈活和可移植性強的特點,成為了系統級編程的首選語言之一。
    的頭像 發表于 10-29 17:30 ?1116次閱讀

    時間復雜度為 O(n^2) 的排序算法

    作者:京東保險 王奕龍 對于小規模數據,我們可以選用時間復雜度為 O(n2) 的排序算法。因為時間復雜度并不代表實際代碼的執行時間,它省去了低階、系數和常數,僅代表的增長趨勢,所以在小規模數據情況下
    的頭像 發表于 10-19 16:31 ?1750次閱讀
    時間復雜度為 O(n^2) 的<b class='flag-5'>排序</b>算法

    TMS320LF240x DSP的C語言和匯編代碼快速入門

    電子發燒友網站提供《TMS320LF240x DSP的C語言和匯編代碼快速入門.pdf》資料免費下載
    發表于 10-18 10:14 ?1次下載
    TMS320LF240x DSP的<b class='flag-5'>C</b><b class='flag-5'>語言</b>和匯編代碼<b class='flag-5'>快速</b>入門

    TPS54120排序和跟蹤

    電子發燒友網站提供《TPS54120排序和跟蹤.pdf》資料免費下載
    發表于 10-10 10:54 ?0次下載
    TPS54120<b class='flag-5'>排序</b>和跟蹤

    hex文件如何查看原c語言代碼

    是處理器可以直接執行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex 文件獲取一些有用的信息或者對程序進行分析,你可以考慮以下幾種方法: 反匯編
    的頭像 發表于 09-02 10:37 ?4998次閱讀
    主站蜘蛛池模板: 伊人香蕉在线播放视频免费 | 国产精品久久久久久AV免费不卡 | 亚洲欧美一区二区成人片 | 激情内射亚州一区二区三区爱妻 | 日本久久中文字幕 | 国产亚洲精品线观看不卡 | 国产小伙和50岁熟女23p | 一区视频免费观看 | 国产高潮国产高潮久久久久久 | 8x华人免费视频 | 果冻传媒2021精品在线观看 | 亚洲日韩欧美国产中文在线 | 久久伊人中文字幕有码 | 在线观看成人3d动漫入口 | 国产三级在线观看免费 | 国产极品美女视频福利 | 理论片午午伦夜理片久久 | 蜜芽tv在线观看免费网站 | 美艳人妻在厨房翘着屁股 | 柏木舞子在线 | 国产成人免费观看 | 好好的曰com久久 | WWW夜片内射视频在观看视频 | 一道精品视频一区二区 | 侮辱丰满美丽的人妻 | 中国xxxxx69| 国产高清美女一级a毛片久久w | 蜜芽最新域名解析网站 | 91精品国产品国语在线不卡 | 琪琪色在线播放 | 亚洲国产精品VA在线看黑人 | 2023国产精品一卡2卡三卡4卡 | 精品在线观看一区 | 日本xxx护士与黑人 日本xxxx裸体xxxx | 国产精品亚洲在钱视频 | 翁公与小莹在客厅激情 | 老师在讲桌下边h边讲课 | www.免费视频 | 秋霞午夜一级理论片久久 | 哺乳期妇女挤奶水36d | JAPANBABES11学生老师 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品