女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

十大經(jīng)典排序算法動畫與解析

電子工程師 ? 來源:lq ? 2019-02-25 09:20 ? 次閱讀

排序算法是《數(shù)據(jù)結(jié)構(gòu)與算法》中最基本的算法之一。

排序算法可以分為內(nèi)部排序和外部排序。內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序。而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。

常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。

用一張圖概括:

時間復雜度與空間復雜度

關(guān)于時間復雜度:

平方階 (O(n2)) 排序 各類簡單排序:直接插入、直接選擇和冒泡排序;

線性對數(shù)階 (O(nlog2n)) 排序 快速排序、堆排序和歸并排序;

O(n1+§)) 排序,§ 是介于 0 和 1 之間的常數(shù)。 希爾排序;

線性階 (O(n)) 排序 基數(shù)排序,此外還有桶、箱排序。

關(guān)于穩(wěn)定性:

穩(wěn)定的排序算法:冒泡排序、插入排序、歸并排序和基數(shù)排序;

不是穩(wěn)定的排序算法:選擇排序、快速排序、希爾排序、堆排序。

一、冒泡排序

1.1 算法步驟

比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。這步做完后,最后的元素會是最大的數(shù)。

針對所有的元素重復以上的步驟,除了最后一個。

持續(xù)每次對越來越少的元素重復上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

1.2 動畫演示

冒泡排序動畫演示

1.3 參考代碼

1//Java代碼實現(xiàn) 2publicclassBubbleSortimplementsIArraySort{ 3 4@Override 5publicint[]sort(int[]sourceArray)throwsException{ 6//對arr進行拷貝,不改變參數(shù)內(nèi)容 7int[]arr=Arrays.copyOf(sourceArray,sourceArray.length); 8 9for(inti=1;iarr[j+1]){15inttmp=arr[j];16arr[j]=arr[j+1];17arr[j+1]=tmp;1819flag=false;20}21}2223if(flag){24break;25}26}27returnarr;28}29}

二、選擇排序

2.1 算法步驟

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

再從剩余未排序元素中繼續(xù)尋找最小(大)元素,然后放到已排序序列的末尾。

重復第二步,直到所有元素均排序完畢。

2.2 動畫演示

選擇排序動畫演示

2.3 參考代碼

1//Java代碼實現(xiàn) 2publicclassSelectionSortimplementsIArraySort{ 3 4@Override 5publicint[]sort(int[]sourceArray)throwsException{ 6int[]arr=Arrays.copyOf(sourceArray,sourceArray.length); 7 8//總共要經(jīng)過N-1輪比較 9for(inti=0;i

三、插入排序

3.1 算法步驟

將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最后一個元素當成是未排序序列。

從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的后面。)

3.2 動畫演示

插入排序動畫演示

3.3 參考代碼

1//Java代碼實現(xiàn) 2publicclassInsertSortimplementsIArraySort{ 3 4@Override 5publicint[]sort(int[]sourceArray)throwsException{ 6//對arr進行拷貝,不改變參數(shù)內(nèi)容 7int[]arr=Arrays.copyOf(sourceArray,sourceArray.length); 8 9//從下標為1的元素開始選擇合適的位置插入,因為下標為0的只有一個元素,默認是有序的10for(inti=1;i0&&tmp

四、希爾排序

4.1 算法步驟

選擇一個增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;

按增量序列個數(shù) k,對序列進行 k 趟排序;

每趟排序,根據(jù)對應的增量 ti,將待排序列分割成若干長度為 m 的子序列,分別對各子表進行直接插入排序。僅增量因子為 1 時,整個序列作為一個表來處理,表長度即為整個序列的長度。

4.2 動畫演示

希爾排序動畫演示

4.3 參考代碼

1//Java代碼實現(xiàn) 2publicclassShellSortimplementsIArraySort{ 3 4@Override 5publicint[]sort(int[]sourceArray)throwsException{ 6//對arr進行拷貝,不改變參數(shù)內(nèi)容 7int[]arr=Arrays.copyOf(sourceArray,sourceArray.length); 8 9intgap=1;10while(gap0){15for(inti=gap;i=0&&arr[j]>tmp){19arr[j+gap]=arr[j];20j-=gap;21}22arr[j+gap]=tmp;23}24gap=(int)Math.floor(gap/3);25}2627returnarr;28}29}

五、歸并排序

5.1 算法步驟

申請空間,使其大小為兩個已經(jīng)排序序列之和,該空間用來存放合并后的序列;

設(shè)定兩個指針,最初位置分別為兩個已經(jīng)排序序列的起始位置;

比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置;

重復步驟 3 直到某一指針達到序列尾;

將另一序列剩下的所有元素直接復制到合并序列尾。

5.2 動畫演示

歸并排序動畫演示

5.3 參考代碼

1//Java代碼實現(xiàn) publicclassMergeSortimplementsIArraySort{ 2 3@Override 4publicint[]sort(int[]sourceArray)throwsException{ 5//對arr進行拷貝,不改變參數(shù)內(nèi)容 6int[]arr=Arrays.copyOf(sourceArray,sourceArray.length); 7 8if(arr.length0&&right.length>0){23if(left[0]<=?right[0])?{24????????????????result[i++]?=?left[0];25????????????????left?=?Arrays.copyOfRange(left,?1,?left.length);26????????????}?else?{27????????????????result[i++]?=?right[0];28????????????????right?=?Arrays.copyOfRange(right,?1,?right.length);29????????????}30????????}3132????????while?(left.length?>0){33result[i++]=left[0];34left=Arrays.copyOfRange(left,1,left.length);35}3637while(right.length>0){38result[i++]=right[0];39right=Arrays.copyOfRange(right,1,right.length);40}4142returnresult;43}4445}

六、快速排序

算法步驟

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

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

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

6.2 動畫演示

快速排序動畫演示

6.3 參考代碼

1//Java代碼實現(xiàn) 2publicclassQuickSortimplementsIArraySort{ 3 4@Override 5publicint[]sort(int[]sourceArray)throwsException{ 6//對arr進行拷貝,不改變參數(shù)內(nèi)容 7int[]arr=Arrays.copyOf(sourceArray,sourceArray.length); 8 9returnquickSort(arr,0,arr.length-1);10}1112privateint[]quickSort(int[]arr,intleft,intright){13if(left

七、堆排序

7.1 算法步驟

創(chuàng)建一個堆 H[0……n-1];

把堆首(最大值)和堆尾互換;

把堆的尺寸縮小 1,并調(diào)用 shift_down(0),目的是把新的數(shù)組頂端數(shù)據(jù)調(diào)整到相應位置;

重復步驟 2,直到堆的尺寸為 1。

7.2 動畫演示

堆排序動畫演示

7.3 參考代碼

1//Java代碼實現(xiàn) 2publicclassHeapSortimplementsIArraySort{ 3 4@Override 5publicint[]sort(int[]sourceArray)throwsException{ 6//對arr進行拷貝,不改變參數(shù)內(nèi)容 7int[]arr=Arrays.copyOf(sourceArray,sourceArray.length); 8 9intlen=arr.length;1011buildMaxHeap(arr,len);1213for(inti=len-1;i>0;i--){14swap(arr,0,i);15len--;16heapify(arr,0,len);17}18returnarr;19}2021privatevoidbuildMaxHeap(int[]arr,intlen){22for(inti=(int)Math.floor(len/2);i>=0;i--){23heapify(arr,i,len);24}25}2627privatevoidheapify(int[]arr,inti,intlen){28intleft=2*i+1;29intright=2*i+2;30intlargest=i;3132if(leftarr[largest]){33largest=left;34}3536if(rightarr[largest]){37largest=right;38}3940if(largest!=i){41swap(arr,i,largest);42heapify(arr,largest,len);43}44}4546privatevoidswap(int[]arr,inti,intj){47inttemp=arr[i];48arr[i]=arr[j];49arr[j]=temp;50}5152}

八、計數(shù)排序

8.1 算法步驟

花O(n)的時間掃描一下整個序列 A,獲取最小值 min 和最大值 max

開辟一塊新的空間創(chuàng)建新的數(shù)組 B,長度為 ( max - min + 1)

數(shù)組 B 中 index 的元素記錄的值是 A 中某元素出現(xiàn)的次數(shù)

最后輸出目標整數(shù)序列,具體的邏輯是遍歷數(shù)組 B,輸出相應元素以及對應的個數(shù)

8.2 動畫演示

計數(shù)排序動畫演示

8.3 參考代碼

1//Java代碼實現(xiàn) 2publicclassCountingSortimplementsIArraySort{ 3 4@Override 5publicint[]sort(int[]sourceArray)throwsException{ 6//對arr進行拷貝,不改變參數(shù)內(nèi)容 7int[]arr=Arrays.copyOf(sourceArray,sourceArray.length); 8 9intmaxValue=getMaxValue(arr);1011returncountingSort(arr,maxValue);12}1314privateint[]countingSort(int[]arr,intmaxValue){15intbucketLen=maxValue+1;16int[]bucket=newint[bucketLen];1718for(intvalue:arr){19bucket[value]++;20}2122intsortedIndex=0;23for(intj=0;j0){25arr[sortedIndex++]=j;26bucket[j]--;27}28}29returnarr;30}3132privateintgetMaxValue(int[]arr){33intmaxValue=arr[0];34for(intvalue:arr){35if(maxValue

九、桶排序

9.1 算法步驟

設(shè)置固定數(shù)量的空桶。

把數(shù)據(jù)放到對應的桶中。

對每個不為空的桶中數(shù)據(jù)進行排序。

拼接不為空的桶中數(shù)據(jù),得到結(jié)果

9.2 動畫演示

桶排序動畫演示

9.3 參考代碼

1//Java代碼實現(xiàn) 2publicclassBucketSortimplementsIArraySort{ 3 4privatestaticfinalInsertSortinsertSort=newInsertSort(); 5 6@Override 7publicint[]sort(int[]sourceArray)throwsException{ 8//對arr進行拷貝,不改變參數(shù)內(nèi)容 9int[]arr=Arrays.copyOf(sourceArray,sourceArray.length);1011returnbucketSort(arr,5);12}1314privateint[]bucketSort(int[]arr,intbucketSize)throwsException{15if(arr.length==0){16returnarr;17}1819intminValue=arr[0];20intmaxValue=arr[0];21for(intvalue:arr){22if(valuemaxValue){25maxValue=value;26}27}2829intbucketCount=(int)Math.floor((maxValue-minValue)/bucketSize)+1;30int[][]buckets=newint[bucketCount][0];3132//利用映射函數(shù)將數(shù)據(jù)分配到各個桶中33for(inti=0;i

十、基數(shù)排序

10.1 算法步驟

將所有待比較數(shù)值(正整數(shù))統(tǒng)一為同樣的數(shù)位長度,數(shù)位較短的數(shù)前面補零

從最低位開始,依次進行一次排序

從最低位排序一直到最高位排序完成以后, 數(shù)列就變成一個有序序列

10.2 動畫演示

基數(shù)排序動畫演示

10.3 參考代碼

1//Java代碼實現(xiàn) 2publicclassRadixSortimplementsIArraySort{ 3 4@Override 5publicint[]sort(int[]sourceArray)throwsException{ 6//對arr進行拷貝,不改變參數(shù)內(nèi)容 7int[]arr=Arrays.copyOf(sourceArray,sourceArray.length); 8 9intmaxDigit=getMaxDigit(arr);10returnradixSort(arr,maxDigit);11}1213/**14*獲取最高位數(shù)15*/16privateintgetMaxDigit(int[]arr){17intmaxValue=getMaxValue(arr);18returngetNumLenght(maxValue);19}2021privateintgetMaxValue(int[]arr){22intmaxValue=arr[0];23for(intvalue:arr){24if(maxValue

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

    關(guān)注

    30

    文章

    4886

    瀏覽量

    70244
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40597
  • 排序算法
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    10207

原文標題:十大經(jīng)典排序算法動畫與解析,看我就夠了

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    動圖展示C語言十大經(jīng)典排序算法

    以前也零零碎碎發(fā)過一些排序算法,但排版都不太好,又重新整理一次,排序算法是數(shù)據(jù)結(jié)構(gòu)的重要部分,系統(tǒng)地學習很有必要。
    發(fā)表于 11-08 09:45 ?734次閱讀

    C語言經(jīng)典排序算法總結(jié)

    本文將通過動態(tài)演示+代碼的形式系統(tǒng)地總結(jié)十大經(jīng)典排序算法
    發(fā)表于 06-05 10:56 ?708次閱讀
    C語言<b class='flag-5'>經(jīng)典</b><b class='flag-5'>排序</b><b class='flag-5'>算法</b>總結(jié)

    C語言實現(xiàn)十大經(jīng)典排序算法

    比較類排序:通過比較來決定元素間的相對次序,由于其時間復雜度不能突破O(nlogn),因此也稱為非線性時間比較類排序
    發(fā)表于 06-25 10:23 ?630次閱讀
    C語言實現(xiàn)<b class='flag-5'>十大經(jīng)典</b><b class='flag-5'>排序</b><b class='flag-5'>算法</b>

    十大排序算法總結(jié)

    排序算法是最經(jīng)典算法知識。因為其實現(xiàn)代碼短,應該廣,在面試中經(jīng)常會問到排序算法及其相關(guān)的問題。
    的頭像 發(fā)表于 12-20 10:39 ?1453次閱讀

    數(shù)據(jù)挖掘十大經(jīng)典算法,你都知道哪些!

    的所有需求。而這三類里又包含許多經(jīng)典算法。而今天,小編就給大家介紹下數(shù)據(jù)挖掘中最經(jīng)典十大算法,希望它對你有所幫助。一、 分類決策樹
    發(fā)表于 11-06 17:02

    單片機濾波算法

    為什么別人的單片機算法不是百度里面的什么十大經(jīng)典算法二十很復雜的算法,誰能提供一個算法應用在嵌入式里濾ad采樣 溫度這些
    發(fā)表于 03-12 17:05

    電池管理中的十大經(jīng)典理論

    電池管理中的十大經(jīng)典理論 1、彼得原理      每個組織都是由各種不同的職位、等級或階層的排列所組成,每個人都隸屬于
    發(fā)表于 11-06 15:43 ?861次閱讀

    數(shù)學建模十大經(jīng)典算法

    電子專業(yè)單片機相關(guān)知識學習教材資料——數(shù)學建模十大經(jīng)典算法
    發(fā)表于 08-08 18:20 ?0次下載

    數(shù)據(jù)挖掘十大經(jīng)典算法,你都知道哪些!

    的所有需求。而這三類里又包含許多經(jīng)典算法。而今天,小編就給大家介紹下數(shù)據(jù)挖掘中最經(jīng)典十大算法,希望它對你有所幫助。?圖1.jpg?(1.8
    發(fā)表于 11-06 17:07 ?2.1w次閱讀

    NI獲選第八屆浦東總部經(jīng)濟十大經(jīng)典樣本,持續(xù)助力中國科技創(chuàng)新和產(chǎn)業(yè)發(fā)展

    由上海市浦東新區(qū)商務委員會主辦的第八屆浦東總部經(jīng)濟十大經(jīng)典樣本發(fā)布活動在上海舉行。NI成功獲選2022年十大經(jīng)典樣本,以生動案例和具體實踐,充分展示NI中國在行業(yè)引領(lǐng)性、全球資源配置功能、科技創(chuàng)新能力等方面的成就。
    的頭像 發(fā)表于 12-01 11:46 ?1373次閱讀

    C語言動圖演示十大經(jīng)典排序算法(含代碼)

    本文將通過動態(tài)演示+代碼的形式系統(tǒng)地總結(jié)十大經(jīng)典排序算法
    的頭像 發(fā)表于 01-29 11:34 ?1509次閱讀

    動圖演示C語言10大經(jīng)典排序算法(含代碼)

    本文將通過 動態(tài)演示+代碼 的形式系統(tǒng)地總結(jié)十大經(jīng)典排序算法排序算法 算法分類
    的頭像 發(fā)表于 02-07 01:24 ?1307次閱讀

    用Python實現(xiàn)十大經(jīng)典排序算法(附動圖)

    冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。它重復地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復地進行直到?jīng)]有再需要
    的頭像 發(fā)表于 03-13 09:29 ?2086次閱讀

    常見排序算法分類

    本文將通過動態(tài)演示+代碼的形式系統(tǒng)地總結(jié)十大經(jīng)典排序算法排序算法 算法分類 ——
    的頭像 發(fā)表于 06-22 14:49 ?1276次閱讀
    常見<b class='flag-5'>排序</b><b class='flag-5'>算法</b>分類

    機器學習的基本流程和十大算法

    為了進行機器學習和數(shù)據(jù)挖掘任務,數(shù)據(jù)科學家們提出了各種模型,在眾多的數(shù)據(jù)挖掘模型中,國際權(quán)威的學術(shù)組織 ICDM(the IEEE International Conference on Data Mining)評選出了十大經(jīng)典算法
    發(fā)表于 10-31 11:30 ?1281次閱讀
    機器學習的基本流程和<b class='flag-5'>十大</b><b class='flag-5'>算法</b>