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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

9个元素换6次达到排序序列_十大算法排序(Sorting Algorithm) Study notes

發(fā)布時(shí)間:2024/10/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9个元素换6次达到排序序列_十大算法排序(Sorting Algorithm) Study notes 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(自己手打的python實(shí)現(xiàn)代碼以及整理的各路大神總結(jié)的知識(shí)點(diǎn))

自用學(xué)習(xí)筆記,由于基于北美cs學(xué)習(xí),文章大量中英混雜(謹(jǐn)慎食用)

十大排序算法:

插入排序

1)Insertion Sort 簡(jiǎn)單插入排序:

2)Shell sort(希爾排序):突破n^2

交換排序

3)Bubble sort:兩兩比較

4)Quicksort

選擇排序

5)Selection Sort選擇排序:選出最小的

6)Heap sort (堆排序,二叉樹(shù)的代言人):

穩(wěn)定的nlog,平常一般不用,常數(shù)太大

歸并排序

7)Merge sort(分治DC的典型代表)

非比較類(lèi)排序:

8)Counting sort 計(jì)數(shù)排序:平凡的線性counting/排序

9)Radix Sort 基數(shù)排序

10)Bucket Sort 桶排序

Time complexity vs Space Complexity

  • 時(shí)間復(fù)雜度:表示的是計(jì)算機(jī)的操作次數(shù), 用Big O notation表示
  • 常見(jiàn)的 time complexity 復(fù)雜度量級(jí)(從快到慢)

    • O(1)【無(wú)論代碼多長(zhǎng),只要沒(méi)有循環(huán)】
    • O(logN)【ie. for i<n, i=i*2 等價(jià)于共循環(huán)x次,且2^x =n】
    • O(n)【for里循環(huán)n遍】
    • O(nlogN)【在2)的基礎(chǔ)上循環(huán)n遍】
    • O(n^2)【把O(n)再嵌套循環(huán)一次】
    • O(n^3)
    • O(n^k)
    • O(2^n)【ie. T(0) = T(1) = 1,同時(shí) T(n) = T(n - 1) + T(n - 2) + 1,斐波那契數(shù)列(Fibonacci sequence)通過(guò)歸納證明法可以證明,當(dāng) n >= 1 時(shí) T(n) < (5/3)^n,同時(shí)當(dāng) n > 4 時(shí) T(n) >= (3/2)^n。所以可以表示為 O((5/3)^n),簡(jiǎn)化后為 O(2^n)。】

    2.空間復(fù)雜度:算法運(yùn)行過(guò)程中臨時(shí)占用內(nèi)存儲(chǔ)蓄空間大小的一個(gè)度量

    3.穩(wěn)定:如果a=b,a原本在b前面,排序之后a仍然在b的前面。

    4.不穩(wěn)定:如果a=b,a原本在b的前面,排序之后 a 可能會(huì)出現(xiàn)在 b 的后面

    1.插入排序

    1)Insertion Sort:簡(jiǎn)單插入排序

    idea: 模擬撲克牌理牌的歸類(lèi)思路

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

    • 平均:O(n^2) (每輪操作O(n)次,共O(n)輪)
    • worst:O(n^2)
    • best: O(n)

    穩(wěn)定性:穩(wěn)定

    適用于: 處理數(shù)據(jù)量比較少且基本有序的數(shù)據(jù)

    process: 從第二個(gè)元素開(kāi)始,與左邊的第一個(gè)元素比較,如果比#1元素小,則插在#1的左邊;如果比#1元素大,則無(wú)需移動(dòng),直接進(jìn)行到#3開(kāi)始比較,此時(shí)前面有兩個(gè)元素,從最靠近的開(kāi)始比較,如果比誰(shuí)大就插入在誰(shuí)的右邊

    python 實(shí)現(xiàn)代碼如下:

    2)Shell Sort 希爾排序

    idea:插入排序的改進(jìn)版,把較大的數(shù)據(jù)集合邏輯上分割(并沒(méi)有實(shí)際分組操作)成若干個(gè)小組,然后對(duì)每個(gè)小組分別進(jìn)行插入排序,即多了一個(gè)增量(gap)以及增量序列

    適用于:中等規(guī)模數(shù)據(jù)

    穩(wěn)定性: 不穩(wěn)定

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

    • 平均: O(n^1.3)
    • worst:O(n^2) 增量序列為 {1,2,4,8.....}
    • best:O(n)

    圖源水印

    python 實(shí)現(xiàn)代碼如下:

    process:增量的存在是將index相差增量的分到一組

    比如arr :5,7,8,3,1,2,4,6

    [index: 0,1,2,3,4,5,6,7]

    length = 8, 這個(gè)的gap = 4,

    此時(shí)a[0],a[4]一組,a[1],a[5]一組,...每個(gè)組進(jìn)行insertion sort

    for i in range(gap, n) - for i in range(4, 8):選定index為4,5,6,7的數(shù)

    lst[i - gap]: index4,5,6,7的分別對(duì)應(yīng)index0,1,2,3

    如果index在前面的value大,就換位置,這一輪排序完為

    1,2,4,3,5,7,8,6

    然后繼續(xù)縮小增量

    第二輪的增量為 gap//=2 為2, 則又變遍歷一次for i in range(gap, n) - for i in range(2, 8)

    此時(shí)為a[0],a[2],a[4],a[6]一組,a[1],a[3],a[5],a[7]一組,每個(gè)組進(jìn)行insertion sort

    lst[i - gap] > lst[i]:a[0]先和a[2]比,

    • 如果a[2]比a[0]大則跳出while 繼續(xù)遍歷for:開(kāi)始a[1]和a[3]比,a[2]和a[4]比....(每輪每個(gè)組輪流來(lái)一個(gè),不是先完成一個(gè)組再進(jìn)行另一個(gè)組
    • 如果a[0]比a[2]大則交換,i -=gap 的存在原理即為insertion sorting:在本組內(nèi),和前面所有元素比,以保證這個(gè)元素比左邊的所有元素大,則跳出while繼續(xù)for

    直到 i - gap <0 停止(因?yàn)槭菑膇ndex大的順著gap找index小的對(duì)應(yīng),如果i-dex小于0則表示已經(jīng)遍歷所有了

    其他代碼實(shí)現(xiàn)詳情可見(jiàn)https://mp.weixin.qq.com/s/4kJdzLB7qO1sES2FEW0Low

    交換排序

    1. Bubble sort

    • idea: 比較相鄰的元素,如果前面的大則交換;針對(duì)所有元素重復(fù)上述步驟,除了最后一個(gè)。即對(duì)n個(gè)數(shù)據(jù)操作n-1輪,每輪找出一個(gè)最大值(會(huì)被移到最后面)
    • 時(shí)間復(fù)雜度:O(n^2)【(n-1)+(n-2)+....+1= n(n-1)/2,等差數(shù)列求和,去掉常數(shù)系數(shù)】(平均=worst), O(n) (best)
    • 穩(wěn)定性:穩(wěn)定
    • python 代碼實(shí)現(xiàn):

    2. Quick Sort

    idea: 選擇一個(gè)數(shù)作為pivot,把小于這個(gè)數(shù)的放在左邊,大于這個(gè)數(shù)的放在右邊,然后再繼續(xù)進(jìn)行分割(partition)和遞歸(recurision)

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

    • O( n N)(平均&Best)
    • O(n^2) worst

    穩(wěn)定性:不穩(wěn)定

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

    未完待續(xù)。。

    總結(jié)

    以上是生活随笔為你收集整理的9个元素换6次达到排序序列_十大算法排序(Sorting Algorithm) Study notes的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。