快排,希爾,桶排,歸併,選擇,冒泡六種排序

2021-09-27 10:43:05 字數 2520 閱讀 1825

排序方式

今天我們就說快排,希爾,桶排,歸併,選擇,冒泡這六種排序

前兩種先說冒泡,選擇

選擇:

解釋:前乙個對第二個第三個第四個…一次進行比較滿族條件就交換(比較過程如下)

圖醜,不要介意

效能:

***冒泡:***

比較方式不一樣,是相鄰兩個逐一進行比較(如圖)

其效能:

兩者的不同之處:

前者第乙個數是最先確定下來的

後者最後乙個數是最先確定下來的

快速排序,桶排:

快速排序

比方說我們有乙個序列,他的順序是6 1 2 7 9 3 4 5 10 8現在我們要利用快速排序對其進行模擬排序,選擇最左邊的數為基數,設立兩個哨兵i,j ,i在最左邊,j在最右邊,此時的基數是6,所以j–往前探索的時候直到找到乙個小於基數6的數時停下來此時j在5的位置停了下來,i開始++往後探索直到找到乙個比基數大的數停下來,第一次交換後的順序是 6 1 2 5 9 3 7 10 8 依次按照這種方式進行下去會發現當i,j相會的時候交換基數和此時i位置處的數就變成了左邊的數都比6小右邊的數都比6大

再對6左邊的數進行剛剛的交換直到遞迴到只有兩個數的序列中

後邊的數同理遞迴

好的下面展示**:

重點在於遞迴結束的條件if(left>right)以及哨兵誰先運動的確定還有遞迴的數是基數的左邊右邊的範圍left—i-1;right—i+1.

效能:

桶排

直接上**:就是給每一數乙個桶然後按照大小依次輸出

**希爾排序**
**如下:(已將括號都刪去只見核心**)

void shellsort(mydatatype *ary,int len)

j=j-increment; //最重要的地方}}

}}

**中可見j=j-increment,因為只有相同間隔之間的交換是有侷限性的,所以在i++中當i加了4個後,而increment也是4時其後的i++將會從array[0]開始與後面的比較(確保了不會存在相同間隔下交換的侷限性)

***歸併排序***
詳情都在**中

#include #include using namespace std;

void merge(int arr,int l,int mid,int r) //並的過程

int i=l,j=mid+1;//i和j分別指向兩個子陣列開頭部分

for(int k=l;k<=r;k++)

else if(j>r) //如果右半邊的數已經放進aux陣列中完畢則將左邊那邊的陣列中的數全部放進aux陣列

else if(aux[i-l]=r)

return ;

int mid=(l+r)/2;

merge_sort(arr,l,mid);

merge_sort(arr,mid+1,r);

merge(arr,l,mid,r);

}void my_merge_sort(int arr,int n)

int main()

mergesort(a,5); //直接呼叫乙個封裝函式

for(int i=0;i<5;i++)

{cout謝謝**

冒泡,快排,插入,希爾,選擇,歸併演算法

演算法,根據資料的樣子,進行做計算。爭取在固有資料的基礎上,達到計算次數 記憶體占用最少的運算方式。現將集中演算法歸納如下 演算法名稱 演算法概要 冒泡挨個拿陣列的元素和後面的做比較,發現大小不對,則交換位置,這樣導致按照座標向後運算,座標資料是一定有序的,相對後面最大或最小 快排拿乙個陣列,向前查...

排序 冒泡,快排,歸併。

1 冒泡 就是每次相鄰的比較,較大的移到後面,一次後就移動最大的到最後面了。include void maopao int a,int len void main int len sizeof a sizeof a 0 maopao a,len for int x1 0 x12 快速排序,用遞迴來理...

排序 選擇 冒泡 快排

簡單介紹三種常見的排序方法 選擇 冒泡 快排。從大到小排列 選擇排序是在所有資料中先選擇第乙個資料作為最大值,依次和後面的每乙個資料比較,如果比最大值大,替換最大值並且記住索引,遍歷結束後,通過索引把最大值和第乙個資料替換。後面的資料依次執行一遍,就可以得到從大到小排列的資料了。如下 4 void ...