到了大三才發現自己大二缺了多少的功課,最近開始看演算法導論,將以前丟掉的拾起來。
在看完2.1插入排序之後,做了一下課後習題,看到這個演算法---選擇演算法
選擇演算法的思想是:
第一次取得陣列的最小元素,放在第乙個位置。接著取得陣列的第二小元素,放在第二個位置。。。。如此下去,直到找到倒數第二小的元素,放在倒數第二個位置,這樣排序便完成了
書上的題目有一下幾個問題:
1.該演算法的迴圈不變式是什麼?
2.為什麼他只需要對前面的n-1個元素,而不是n個元素執行?
3.用θ表示最壞情況
首先用c++實現演算法
void chosesort(int len,int a)
}//交換結果
a[pos] = a[i];
a[i] = key;}}
現在來看上面的問題
1.迴圈不變式問題,就是要證明這樣做的科學性。需要證明三條性質
初始化,保持,終止
初始化:將最小的放在首位置
保持:每次找到比剩餘裡面最小的,放到相應位置
終止:len-1
2.很簡單,第i-1小知道了,剩下乙個肯定是倒數第一小
3.看看這個演算法
不管資料如何分布,這個演算法總需要比較
n-1 + n-2 +。。。。。+1 = (n-1)*n/2次
所以演算法的最壞複雜度為θ(n*n)
這個演算法很簡單,但是在手寫的時候還是出現了一些問題,還需多加練習。。
讀演算法導論日誌 選擇排序
selectionsort 同樣是一種簡單的演算法,演算法的實質就是不斷地從資料的無序區當中拿出最小 大 的元素並將其依次排列。selectionsort 依然是乙個複雜度為 o n 2 級別的演算法,但是這個演算法和之前的 insertionsort 有一些區別,最主要的區別是比較的順序,inse...
演算法導論 c 桶排序
桶排序是按照桶的概念把元素往裡面放,然後桶內還有乙個排序,桶內排序可以用比較排序也可以用計數排序遞迴使用桶排序也可以。我這裡比較懶,直接用了sort函式。直接就三步,仍然用vector實現。建桶 放桶連線桶 vector bucket sort vector array array.clear 清除...
C 選擇排序演算法
原理 選擇排序是搜尋整個陣列,將找到的最小值與陣列中第一位元素交換位置 然後在剩下的元素中找到最小值,將找到的最小值與陣列中第二位元素交換位置,依此類推,直到將所有的元素排好順序。選擇排序,從小到大排列 public static void selectionsort 定義乙個陣列 for int ...