在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

快速排序是一種交換排序

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:未知 ? 作者:李倩 ? 2018-07-27 14:49 ? 次閱讀

要點(diǎn)

快速排序是一種交換排序。

快速排序由C. A. R. Hoare在1962年提出。

它的基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分:分割點(diǎn)左邊都是比它小的數(shù),右邊都是比它大的數(shù)。

然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。

詳細(xì)的圖解往往比大堆的文字更有說明力,所以直接上圖:

上圖中,演示了快速排序的處理過程:

初始狀態(tài)為一組無(wú)序的數(shù)組:2、4、5、1、3。

經(jīng)過以上操作步驟后,完成了第一次的排序,得到新的數(shù)組:1、2、5、4、3。

新的數(shù)組中,以2為分割點(diǎn),左邊都是比2小的數(shù),右邊都是比2大的數(shù)。

因?yàn)?已經(jīng)在數(shù)組中找到了合適的位置,所以不用再動(dòng)。

2左邊的數(shù)組只有一個(gè)元素1,所以顯然不用再排序,位置也被確定。(注:這種情況時(shí),left指針和right指針顯然是重合的。因此在代碼中,我們可以通過設(shè)置判定條件left必須小于right,如果不滿足,則不用排序了)。

而對(duì)于2右邊的數(shù)組5、4、3,設(shè)置left指向5,right指向3,開始繼續(xù)重復(fù)圖中的一、二、三、四步驟,對(duì)新的數(shù)組進(jìn)行排序。

核心代碼

publicintdivision(int[]list,intleft,intright){//以最左邊的數(shù)(left)為基準(zhǔn)intbase=list[left];while(left=base)right--;//找到了比base小的元素,將這個(gè)元素放到最左邊的位置list[left]=list[right];//從序列左端開始,向右遍歷,直到找到大于base的數(shù)while(left

快速排序算法的性能

時(shí)間復(fù)雜度

當(dāng)數(shù)據(jù)有序時(shí),以第一個(gè)關(guān)鍵字為基準(zhǔn)分為兩個(gè)子序列,前一個(gè)子序列為空,此時(shí)執(zhí)行效率最差。

而當(dāng)數(shù)據(jù)隨機(jī)分布時(shí),以第一個(gè)關(guān)鍵字為基準(zhǔn)分為兩個(gè)子序列,兩個(gè)子序列的元素個(gè)數(shù)接近相等,此時(shí)執(zhí)行效率最好。

所以,數(shù)據(jù)越隨機(jī)分布時(shí),快速排序性能越好;數(shù)據(jù)越接近有序,快速排序性能越差。

空間復(fù)雜度

快速排序在每次分割的過程中,需要 1 個(gè)空間存儲(chǔ)基準(zhǔn)值。而快速排序的大概需要 Nlog2N次的分割處理,所以占用空間也是 Nlog2N 個(gè)。

算法穩(wěn)定性

在快速排序中,相等元素可能會(huì)因?yàn)榉謪^(qū)而交換順序,所以它是不穩(wěn)定的算法。

完整參考代碼

JAVA版本

代碼實(shí)現(xiàn)

1publicclassQuickSort{23publicintdivision(int[]list,intleft,intright){4//以最左邊的數(shù)(left)為基準(zhǔn)5intbase=list[left];6while(left=base)9right--;10//找到了比base小的元素,將這個(gè)元素放到最左邊的位置11list[left]=list[right];1213//從序列左端開始,向右遍歷,直到找到大于base的數(shù)14while(left

運(yùn)行結(jié)果

排序前: 1 3 4 5 2 6 9 7 8 0 base = 1: 0 1 4 5 2 6 9 7 8 3 base = 4: 3 2 4 6 9 7 8 5 base = 3: 2 3 base = 6: 5 6 7 8 9 base = 7: 7 8 9 base = 8: 8 9 排序后: 0 1 2 3 4 5 6 7 8 9

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4612

    瀏覽量

    92901
  • 快速排序
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    5433

原文標(biāo)題:排序算法總結(jié)(2):快速排序

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA排序-冒泡排序介紹

    排序算法是圖像處理中經(jīng)常使用一種算法,常見的排序算法有插入排序、希爾排序、選擇排序、冒泡
    發(fā)表于 07-17 10:12 ?1091次閱讀
    FPGA<b class='flag-5'>排序</b>-冒泡<b class='flag-5'>排序</b>介紹

    快速排序

    // 快速排序package algorithmsimport "fmt"http:// 第一種寫法func quickSort(values []int, left, right int
    發(fā)表于 10-17 19:05

    簡(jiǎn)述計(jì)算機(jī)排序

    不用交換,低指針指向的小于樞軸的元素不用交換。直到高低指針指向小于等于或者大于等于的元素后直接交換元素。趟過后,在低子分區(qū)和高子分區(qū)中繼續(xù)進(jìn)行遞歸
    發(fā)表于 12-26 23:07

    嵌入式stm32實(shí)用的排序算法 - 交換排序

    :插入排序、選擇排序交換排序、歸并排序、基數(shù)排序排序的分類大致為如下圖:在內(nèi)部
    發(fā)表于 04-12 13:14

    C#實(shí)現(xiàn)快速排序

    快速排序法是對(duì)冒泡排序一種改進(jìn)。它的基本思想是,通過排序將待
    發(fā)表于 08-09 17:57 ?16次下載

    文了解冒泡排序

    冒泡排序一種交換排序。 什么是交換排序呢? 交換排序:兩兩比較待排序的關(guān)鍵字,并
    的頭像 發(fā)表于 01-17 12:47 ?3034次閱讀
    <b class='flag-5'>一</b>文了解冒泡<b class='flag-5'>排序</b>

    常用排序算法分析

    一種是比較排序,時(shí)間復(fù)雜度O(nlogn) ~ O(n^2),主要有:冒泡排序,選擇排序,插入排序,歸并
    的頭像 發(fā)表于 07-13 16:13 ?2163次閱讀

    實(shí)用的排序算法 - 交換排序

    實(shí)用的排序算法 - 交換排序
    的頭像 發(fā)表于 03-20 09:53 ?1744次閱讀
    實(shí)用的<b class='flag-5'>排序</b>算法 -  <b class='flag-5'>交換排序</b>

    排序算法分享:歸并排序說明

    我們今天繼續(xù)給大家分享排序算法里面的另外一種排序算法:歸并排序
    的頭像 發(fā)表于 12-24 14:34 ?773次閱讀

    揭秘冒泡排序交換排序和插入排序

    個(gè)教官對(duì)這支隊(duì)伍進(jìn)行整理,使得隊(duì)伍里的人從低到高的排下去,教官想到了一種排序算法來(lái)對(duì)這支隊(duì)伍進(jìn)行身高排序。 如何理解冒泡排序 教官立馬想到了
    的頭像 發(fā)表于 06-18 09:57 ?1549次閱讀

    C語(yǔ)言排序快速排序的技巧

    快速排序是由東尼·霍爾所發(fā)展的一種排序算法。在平均狀況下,排序 n 個(gè)項(xiàng)目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,
    的頭像 發(fā)表于 07-29 15:14 ?2483次閱讀
    C語(yǔ)言<b class='flag-5'>排序</b>中<b class='flag-5'>快速</b><b class='flag-5'>排序</b>的技巧

    希爾排序的基本思想

    希爾排序是插入排序一種,又稱“縮小增量排序”,希爾排序是直接插入排序算法的
    發(fā)表于 08-08 10:02 ?1363次閱讀

    冒泡排序的基本思想

    冒泡排序的英文Bubble Sort,是一種最基礎(chǔ)的交換排序。之所以叫做冒泡排序,因?yàn)槊?b class='flag-5'>一個(gè)元素都可以像小氣泡
    的頭像 發(fā)表于 01-20 11:38 ?5907次閱讀
    冒泡<b class='flag-5'>排序</b>的基本思想

    php版冒泡排序是如何實(shí)現(xiàn)的?

    無(wú)論學(xué)習(xí)哪一種編程語(yǔ)言,進(jìn)行算法方面的訓(xùn)練時(shí)都繞不開“排序”。排序在進(jìn)階編程中有非常廣泛的應(yīng)用,要想成為編程高手,排序算法是必須要掌握的。而冒泡排序
    的頭像 發(fā)表于 01-20 10:39 ?942次閱讀
    php版冒泡<b class='flag-5'>排序</b>是如何實(shí)現(xiàn)的?

    jwt冒泡排序的原理

    jwt簡(jiǎn)介 冒泡排序: (Bubble Sort)是一種簡(jiǎn)單的交換排序。之所以叫做冒泡排序,因?yàn)槲覀兛梢园衙總€(gè)元素當(dāng)成個(gè)小氣泡,根據(jù)氣泡大
    的頭像 發(fā)表于 09-25 16:33 ?545次閱讀
    jwt冒泡<b class='flag-5'>排序</b>的原理
    主站蜘蛛池模板: 欧美视频综合| 久久夜色tv网站| 国产在线五月综合婷婷| 天天干在线影院| 永久免费看黄| 四虎精品永久在线| 免费在线播放视频| 欧美国产三级| 天堂-bt种子| 老师别揉我胸啊嗯上课呢视频| 午夜看看| 日本口工禁漫画无遮挡全彩| 欧美日韩精品一区二区在线线| 激情五月综合婷婷| 黄网在线免费看| 888米奇在线视频四色| 四虎音影| 亚洲免费黄色网址| 亚洲视频在线观看一区| 日本成人资源| 波多野结衣在线视频观看| 午夜黄色网址| 日日夜夜天天人人| 色屁屁www影院免费观看视频| 国产美女精品久久久久久久免费 | 亚洲成人在线免费| 精品国产成人系列| 在线观看网站黄| 日本三级日本三级人妇三级四| 国产真实乱偷人视频| 99国产福利| 日本黄色免费在线| 奇米奇米| 婷婷六月激情在线综合激情| 夜夜春夜夜夜夜猛噜噜噜噜噜| 欧美精品人爱a欧美精品| 国内精品久久久久影院薰衣草| 日本wwwhdsex69| 欧美成人观看免费全部完小说| 国产精品青草久久久久福利99 | 天天操天天干天天爱|