演算法導論 選擇排序 c

2021-06-20 05:05:37 字數 740 閱讀 2909

到了大三才發現自己大二缺了多少的功課,最近開始看演算法導論,將以前丟掉的拾起來。

在看完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 ...