各種排序演算法總結

2021-06-19 11:37:58 字數 1819 閱讀 3433

(注:以下所講排序,以公升序排序為例!)

選擇排序:

作者思路:在一組數中,選擇第乙個數標記為最小值,在剩下的數中找比它小的數,若找到則交換兩數,標記新的"最小值",然後繼續往下找,這樣一趟下來就可以找到一組數中第二小的值,第二次以第二個數作為最小值,如此迴圈下去。這是最簡單、最基礎的一種排序演算法。

例子:13,34,18,9,12,34,100

第一次(i=0),以13為最小值,第一次演算法結束:9,34,18,13,12,100

第二次(i=1),以34作為最小值,(18比它小,交換得)9,18,34,13,12,100——>(13比18小,交換)9,13,34,18,12,100——>結束得:9,12,34,18,13,100,此時 12已經是真正的次最小值。往後找不到比它還小的。

第三次(i=2),以34做為最小值,繼續執行

。。。時間複雜度:

o(n * n);

**:

void swap(int a, int i, int j)

void selectsort(int a, int len) //o(n * n)

array[k] = temp;

}}

氣泡排序:

作者思路:

將被排序的記錄陣列r[1..n]垂直排列,每個記錄r[i]看作是重量為r[i].key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃瞄陣列r:凡掃瞄到違反本原則的輕氣泡,就使其向上"飄浮"。如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。

**:

void bubblesort(int a, int len) //o(n * n)

} }}

總結:上述三種排序演算法都比較基礎,也不難,關鍵要理解其思想;三種演算法都是穩定演算法(ps:什麼是穩定演算法,比如一組數中有兩個一樣的數 9,9*(加*以示區分) 排序後,兩者的順序不會變動 這樣的演算法是穩定的 )。

快速排序:

快速排序是一種排序演算法,對包含n個數的輸入陣列,平均時間為o(nlgn),最壞情況是o(n^2)。

通常是用於排序的最佳選擇。因為,基於比較的排序,最快也只能達到o(nlgn)。

快速排序使用分治法(divide and conquer)策略來把乙個序列(list)分為兩個子串行(sub-lists)。

步驟為:

從數列中挑出乙個元素,稱為 "基準"(pivot),

重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。

遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

遞迴的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞迴下去,但是這個演算法總會退出,因為在每次的迭代(iteration)中,它至少會把乙個元素擺到它最後的位置去。

**:

int partation(int a, int low, int high)

a[low] = a[high];

while( (low < high) && (a[low] <= val) )

a[high] = a[low];

} a[low] = val;

return low;

}void quicksort(int a, int low, int high) //o(n * n)

}

感想:排序演算法很精巧,真佩服當初能想出那種演算法的計算機界大牛,自己還差很遠。

各種排序演算法總結

1 插入排序 void insertsort int a,int n a j 1 key 插入排序是穩定的排序,平均和最壞時間複雜度是o n 2 最好的時間複雜度是o n 對應於全部排好序的情況。2 氣泡排序 void bubblesort int a,intn 氣泡排序是穩定的排序,平均和最壞時間...

各種排序演算法總結

created by vencent on 2008.8.29 1.插入排序 1.1 一般插入排序 insertsort int array,int length 1.2 折半插入排序 bininsertsort int array,int length 1.3 希爾排序 shellsort int...

各種排序演算法總結

一 排序分類 內部排序 整個排序過程不需要訪問外存便能完成。外部排序 參加排序的記錄數量很大,整個序列的排序過程不可能在記憶體中完成。二 效能比較 排序方法 平均情況 最好情況 最壞情況 空間穩定性 冒泡o n2 o n o n2 o 1 穩定簡單選擇排序 o n2 o n2 o n2 o 1 不穩...