幾種排序演算法總結

2021-07-09 21:41:09 字數 3267 閱讀 3693

注:以下所有排序演算法都是按照整數值從小到大排序。

思想:對於乙個序列,走一趟把最大數冒到最後面。

示例:對於序列4, 10, 1, 6, 2, 7, 3, 8如下圖(紅框表示下一趟需要處理的子串行)

即總共需要走n趟,當第i趟走完時倒數i個數是有序的。

**

for(i = 0; i < n; i++) }}

優化:由上面的示意圖可知,當第4趟走完時序列已經完全排好序了,後面的幾趟都是多餘的。因此可以弄乙個標記變數,假如在某一趟中沒有發生交換則說明對於任意兩個相鄰的元素都滿足前者《後者,也就是序列已經排好序了,因此可以提前結束。

時間複雜度:o(n^2),空間複雜度o(1),穩定性:穩定。

總結:走n趟,第i趟將前n-i+1個元素的最大數冒到最後面。

思想:對於乙個序列,走一趟就把選到的最小數放在該序列的最前面。

示例:對於序列4, 10, 1, 6, 2, 7, 3, 8如下圖

}時間複雜度:o(n^2),空間複雜度o(1),穩定性:不穩定。總結:走n趟,第i趟將後n-i+1個元素的最小數選擇放到最前面。思想:對於後面n-1個數,依次插入到前面的有序序列。

示例:對於序列4, 10, 1, 6, 2, 7, 3, 8如下圖

**(直接插入法)

for(i = 1

; i < n; i++) else }}

時間複雜度:o(n^2),空間複雜度o(1),穩定性:穩定。總結:將後n-1個元素逐個插入到前面的有序序列中思想:分治排序每一部分,而排序採用partition方法進行。

示例:對於序列4, 10, 1, 6, 2, 7, 3, 8。partition過程:

//對a[left]~a[right]進行劃分

int partition(int a, int left, int right) else

//如果找到則放到low指標指向的位置

if(low < high)

//左指標尋找第乙個大於等於base的數的位置

while(low < high && a[low] < base)

//如果找到則放在high指標指向的位置

if(low < high)

}//此時low一定等於high

//將基準值放在中間位置並返回

a[low] = base;

return low;

}}//對a[left]~a[right]排序

void quicksort(int a, int left, int right)

}

時間複雜度:最好情況o(nlogn),最壞情況o(n^2),平均情況o(nlogn)。空間複雜度:所需棧空間o(logn)~o(n)。穩定性:不穩定思想:利用堆進行調整使得堆上的元素有序。

**:

void siftddown(int a, int p, int len) 

if(a[p] > a[child]) else

}}int main()

; int n = 8;

int i;

//建立小根堆

for(i = n/2 - 1; i>= 0; i--)

//不斷取出堆頂元素

for(i = n - 1; i >= 0; i--)

cout

0;}

時間複雜度:最好情況o(nlogn),最壞情況o(nlogn),平均情況o(nlogn)。空間複雜度:o(1)。穩定性:不穩定**:

//合併a[start]~a[mid]和a[mid+1]~a[end]

void merge(int a, int start, int mid, int end)

int p = start, q = mid + 1;

//臨時空間

int *temp = new

int[end - start + 1];

int k = 0;

while(p <= mid && q <= end) else

}while(p <= mid)

while(q <= end)

//for(int i = start; i <= end; i++)

delete temp;

}void mergesort(int a, int start, int end)

}

時間複雜度:最好情況o(nlogn),最壞情況o(nlogn),平均情況o(nlogn)。空間複雜度:o(n)。穩定性:穩定

說明:如果最好情況與最壞情況的時間複雜度不一樣,則說明初始資料集的排列順序對該演算法的效能有影響。

幾種常用排序演算法總結

排序 強力推薦,這個算是總結的不錯的一篇文章,直接轉了 文章中的 也許有些錯誤,關於直接插入排序,第一篇已經做出了修改,其他的有時間再看 所謂排序,就是要整理檔案中的記錄,使之按關鍵字遞增 或遞減 次序排列起來。當待排序記錄的關鍵字都不相同時,排序結果是惟一的,否則排序結果不惟一。在待排序的檔案中,...

幾種常用排序演算法總結

所謂排序,就是要整理檔案中的記錄,使之按關鍵字遞增 或遞減 次序排列起來。當待排序記錄的關鍵字都不相同時,排序結果是惟一的,否則排序結果不惟一。在待排序的檔案中,若存在多個關鍵字相同的記錄,經過排序後這些具有相同關鍵字的記錄之間的相對次序保持不變,該排序方法是穩定的 若具有相同關鍵字的記錄之間的相對...

幾種經典排序演算法的總結

假期即將結束,用最後這兩天溫習一下幾種經典排序演算法,總結一下,如有錯誤,請不吝指出 1.基本概念 1 穩定排序 當待排元素中有相同元素時,排序完後這些相同元素的相對位置與原來一致。例如 1a 2a,5,4,1b 3,2b 排序完後 1a 1b,2a 2b,3,4,5 2 原地排序 指排序時只需要使...