8大排序演算法

2021-07-31 04:11:24 字數 2242 閱讀 7895

一、各個排序演算法的過程:

1、直插入排序:乙個個的進行插入,直到有序序列。穩定的。 要點:設立哨兵,作為臨時儲存和判斷陣列邊界之用。

具體實現**如下:   時間複雜度:o(n^2).

void insertsort(int a, int n)  

}

3、選擇排序:按大小順序一次選出,進行公升降排列。 在要排序的一組數中,選出最小(或者最大)的一

個數與第1個位置的數交換;

然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元素(最後

乙個數)比較為止。

/** 

* 陣列的最小值 

*  * @return int 陣列的鍵值 

*/  

int selectminkey(int a, int n, int i)  

return k;  

}    

/** 

* 選擇排序 

*  */  

void selectsort(int a, int n)  

print(a,  n , i);  //列印每趟排序的結果

}  

}

4、堆排序:序是一種樹形選擇排序,建大(小)頂堆,輸出對頂元素,調整堆,迴圈進行 。

堆排序需要兩個過程,一是建立堆,二是堆頂與堆的最後乙個元素交換位置。

/** 

* 已知h[s…m]除了h[s] 外均滿足堆的定義 

* 調整h[s],使其成為大頂堆.即將對第s個結點為根的子樹篩選,  

*  * @param h是待調整的堆陣列 

* @param s是待調整的陣列元素的位置 

* @param length是陣列的長度 

*  */  

void heapadjust(int h,int s, int length)  

/** 

* 堆排序演算法 

*/  

void heapsort(int h,int length)  

}

5、氣泡排序

/交換:相鄰互換,大底小冒。 每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。

void bubblesort(int a, int n)  

}  }  

}

6、快速排序:迴圈利用基準分割兩塊,一前一後指標,比較大小,交換基準與它的位置。

void swap(int *a, int *b)  

int partition(int a, int low, int high)  

print(a,10);  

return low;  

}    

void quicksort(int a, int low, int high)  

}

7、歸併排序:不斷合併有序列

//將r[i…m]和r[m +1 …n]歸併到輔助陣列rf[i…n]  

void merge(elemtype *r,elemtype *rf, int i, int m, int n)  

while(i <= m)  rf[k++] = r[i++];  

while(j <= n)  rf[k++] = r[j++];  

}

8、基數排序:資料分組,組內排序。

是按照低位先排序,然後收集;再按照高位排序,然後再收集;依次類推,直到最高位。基數排序基於分別排序,分別收集,所以是穩定的。

二、排序演算法之間的對比:用於直接解題和記憶

最好最壞時間複雜度一致的表明對序列的初始排序沒有影響。

三、拓撲排序演算法

由aov

網構造拓撲序列的拓撲排序演算法主要是迴圈執行以下兩步,直到不存在入度為

0的頂點為止。

(1)選擇乙個入度為

0的頂點並輸出之;

(2)從網中刪除此頂點及所有出邊。

迴圈結束後,若輸出的頂點數小於網中的頂點數,則輸出「有

迴路」資訊,否則輸出的頂點序列就是一種拓撲序列。

將其區別於圖的深度優先遍歷和廣度優先遍歷序列。

8大排序總結

include includeusing namespace std void select sort vector a 選擇排序 非穩定 void bubble sort vector a 氣泡排序 void insert sort vector a 插入排序 有序最快 void shell so...

8大排序整理

2.選擇排序 3.插入排序 4.歸併排序 5.基數排序 最快平均 最慢空間複雜度 穩定性複雜性 o n o n2 o n2 o 1 穩定簡單 氣泡排序是一種用時間換空間的排序方法 最壞情況是把順序的排列變成逆序,或者把逆序的數列變成順序,最差時間複雜度o n 2 只是表示其操作次數的數量級。最好的情...

九大排序演算法

常見的排序分為兩類,一類是內部排序 直接插入排序 希爾排序 簡單選擇排序 堆排序 氣泡排序 快速排序 歸併排序 基數排序 一類是外部排序。當n較大時,應該使用時間複雜度為o nlog2n 的排序,如快速排序 堆排序 歸併排序。快排是基於比較的內部排序中,最好的方法。假設陣列為r 0 r n 1 第一...