今天繼續介紹排序算法系列的第二講,選擇排序。選擇排序也是一種常見的排序方法,非常簡單。廢話不說,來看看吧。
思想
還是先來看看選擇排序的思想。選擇排序的思想非常直接,不是要排序么?那好,我就從所有序列中先找到最小的,然后放到第一個位置。之后再看剩余元素中最小的,放到第二個位置……以此類推,就可以完成整個的排序工作了。可以很清楚的發現,選擇排序是固定位置,找元素。相比於插入排序的固定元素找位置,是兩種思維方式。不過條條大路通羅馬,兩者的目的是一樣的。
代碼
for(int i=0; i<v.size(); i++){
int min = v[i];
int temp;
int index = i;
for(int j=i+1;j<v.size();j++){
if(v[j] < min){
min = v[j];
index = j;
}
}
temp = v[i];
v[i] = min;
v[index]= temp;
}
分析
從選擇排序的思想或者是上面的代碼中,我們都不難看出,尋找最小的元素需要一個循環的過程,而排序又是需要一個循環的過程。因此顯而易見,這個算法的時間復雜度也是O(n*n)的。這就意味值在n比較小的情況下,算法可以保證一定的速度,當n足夠大時,算法的效率會降低。並且隨着n的增大,算法的時間增長很快。因此使用時需要特別注意。
今天又介紹了一種簡單的排序方法,下次可能要講一講另外一種簡單方法——冒泡排序。