排序方式
今天我們就說快排,希爾,桶排,歸併,選擇,冒泡這六種排序
前兩種先說冒泡,選擇
選擇:
解釋:前乙個對第二個第三個第四個…一次進行比較滿族條件就交換(比較過程如下)
圖醜,不要介意
效能:
***冒泡:***
比較方式不一樣,是相鄰兩個逐一進行比較(如圖)
其效能:
兩者的不同之處:
前者第乙個數是最先確定下來的
後者最後乙個數是最先確定下來的
快速排序,桶排:
快速排序
比方說我們有乙個序列,他的順序是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 ...