四 資料結構與演算法 其他排序

2021-07-14 19:12:42 字數 1600 閱讀 4471

除了氣泡排序和選擇排序以外,還有插入排序、快速排序(檢查快排)

插入排序:顧名思義,是一種插入的操作,即假定前邊已經有序,拿到有序後邊的數字一次和前面的數做比較,直到插入到前邊的數比他大為止。這樣將是不是很抽象呢?好吧我們先看**, count是a陣列的總數:

void

insertsort(

inta,

intcount)

a[j] = needinsertnumber;}

printf

("\n

插入排序結果:");

for(

inti =

0; i < count; i++)

}**中,可以看到,i代表我們將要插入的數字(即還未被排序的數字),用while迴圈來控制和前邊的數字是否需要插入到此處,ok,我們分析下這段**,首先拿出了第二個數字53,然後比較53和53之前的數字,53之前的數字3小於53所以不進入while迴圈,此時陣列沒有變化,i++,此時i = 2,拿出23,23和53做比較,發現53>23,進入迴圈此時陣列裡23和53做了交換,然後j--,此時j=1,所有j-1de位置是3,23和3又做了比較,發現3<23,退出while迴圈,for迴圈拿出54.。。。看懂了嗎?排隊中一次拿出下乙個,插入到已經排好序的前邊,其實也不難理解是不是

總結:插入排序比冒泡要快一倍,很多時候比選擇排序也要快一些

希爾排序:應該說希爾排序也屬於插入排序,希爾排序增加了比較的跨度,所以希爾排序比直接插入排序會效率高一點,但是希爾排序的效率還是不如快速排序,如果資料量小的話,基本都還ok,如果資料量上來建議大家選擇快速排序。

基本原理:不再比較挨著的數字,而是做間隔比較。間隔越來越小,直到間隔為1的時候,排序停止,不多說了直接**:

快速排序:快排應該是效率最高的,最好的一種排序方法,對冒泡演算法進行了改進。

基本原理:以乙個數為基準資料,將資料分為兩組:左邊比基準資料小,右邊比基準資料大。然後採用遞迴方式再將這兩組資料按相同的方式去排序,知道最後排好順序為止。

**如下:

void

xiersort (

inta,

intcount) }

}d --; }

printf

("\n

希爾排序

\t迴圈次數:

%d\t

交換次數

%d\n

結果:"

, forcount, changecount);

for(int

i =

0; i < count; i++) }

quicksort

(a,

0, count-1);

void

quicksort (

inta,

intleft,

intright)

a[i] = a[j];

a[j] = key;

while

(a[i] < key)

a[j] = a[i];

a[i] = key;

}quicksort

(a, left, i-1);

quicksort

(a, i+

1, right);}}

資料結構與演算法 四 常用排序演算法

最近想總結一下常用的幾種排序演算法,恰好看到一系列總結的很好的部落格,感覺博主做的很用心,分享一下。排序演算法 一 之3種簡單排序 選擇,冒泡,直接插入 排序演算法 二 之希爾排序 排序演算法 三 之堆排序 排序演算法 四 之歸併排序 排序演算法 五 之快速排序 附上我自己的 實現 c 選擇排序 氣...

資料結構與演算法 四 排序

def heap sort li def heapfly li start len li 2 1 獲取最後乙個葉子節點的父節點 for nod in range start,1,1 left 2 nod 1 right min left 1,len li 1 temp left if li left...

資料結構與演算法四

資料結構是資料儲存的方式,演算法則是處理資料的方法,通常我們通過分析演算法的時間複雜度和空間複雜度來判斷它的好壞。通常我們學資料結構的同時也會學習演算法,資料結構的不同就會導致演算法的不同,資料結構的選擇對演算法效率會產生重大的影響,所以資料結構與演算法緊密聯絡。乙個問題可能會有多種演算法,我們當然...