幾種排序方法

2021-08-18 02:13:26 字數 1767 閱讀 6843

排序方法

平均最好

最壞輔助空間

穩定性冒泡

o(n2)

o(n)

o(n2)

o(1)

穩定簡單選擇

o(n2)

o(n2)

o(n2)

o(1)

穩定插入

o(n2)

o(n)

o(n2)

o(1)

穩定希爾

o(nlogn)~o(n2)

o(n1.3)

o(n2)

o(1)

不穩定堆排序

o(nlogn)

o(nlogn)

o(nlogn)

o(1)

不穩定歸併

o(nlogn)

o(nlogn)

o(nlogn)

o(n)

穩定快速

o(nlogn)

o(nlogn)

o(n2)

o( logn) ~o(n)

不穩定氣泡排序:

void bubblesort(list *l)}}}

簡單選擇排序(效能略優於冒泡)

通過n-i次比較,選擇最小的和目標i交換

//簡單排序

void selectsort(list *l)

if (min != i)

swap(l, i, min);

}}

插入排序

基於有序的假設插入,比較後,資料右移,填空

//插入排序,基於有序的事實,資料右移,插入

void insertionsort(int a,int n)

}

堆排序

建立堆(根、子節點,下濾),根與堆末尾交換,調整堆

特點:非常穩定 o(nlogn),相比於希爾排序慢(移動資料進行兩次比較)

//堆排序  ,先建立堆,讓堆的首尾交換,重新建立堆

#define leftchild (i) (2*i+1)

void percdown(int *a, int i, int n)

if (a[child] > a[i])

a[i] = a[child];

else

break;

} a[i] = tmp;

}void heapsort(int *a, int n)

}

歸併排序

分治 、 遞迴、 宣告乙個臨時變數tmparray,避免遞迴佔空間,

很難用於主存排序,o(nlogn),合併是外部排序的中心思想。

void merge(int *a, int * tmparray, int lpos, int rpos, int rend)//命名是否幫助理解

else

}while (lpos <= leftend)

while (rpos <= rend)

for (int i = 0; i < rend - lpos + 1; i++, rend--) }

void msort(int *a, int * tmparray, int left, int right) }

void mergesort(int *a, int n)

else

}

希爾

o(n7/6)   最壞 o(n4/3)

快排

幾種排序方法

一 選擇排序 原理 1 依次比較陣列中元素,從而記錄下陣列中最小的元素 2 將最小元素與陣列第乙個元素交換 3 依次比較陣列中剩餘元素,從而記錄下剩餘陣列中最小的元素 與陣列第二個元素交換,以此類推 特點 需要大約 n 1 n 2 1 n 2 2次比較和n次交換,演算法的時間效率取決於比較的次數。i...

java幾種排序 方法

1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...

javascript 的幾種排序方法

所謂排序,就是要整理檔案中的記錄,使之按關鍵字遞增 或遞減 次序排列起來。其確切定義如下 輸入 n個記錄r1,r2,rn,其相應的關鍵字分別為k1,k2,kn。輸出 ril,ri2,rin,使得ki1 ki2 kin。或ki1 ki2 kin 這裡,我們簡單介紹幾種排序方法,直接插入排序 希兒排序 ...