1. 程式人生 > 其它 >查詢資料的排序的位置_簡單選擇排序C++實現

查詢資料的排序的位置_簡單選擇排序C++實現

技術標籤:查詢資料的排序的位置

簡單選擇排序是每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,第一次從下標為0的開始,將下標為0的這個數與後面的n-1個進行比較;找出最小或者最大的放在下標為0的這個位置;第二次從下標為1的開始比較;查詢剩下的最大或者最小值;放在下標為1的位置;直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。

概念比較簡單,我們直接看程式碼:

void select_sort(vector<int>& nums,int n){
    for(int i = 0;i < n;i++){
        int min = i;
        for(int j = i+1;j < n;j++){
            if(nums[j] < nums[min]){
                min = j;
            }
        }
        if(min != i){
            int tmp = nums[i];
            nums[i] = nums[min];
            nums[min] = tmp;
        }
    }
}

選擇排序和氣泡排序有點類似,都是將每次迴圈中的最值移動到陣列的一端,可能會令一些人感到混亂,但其實區別地方還是挺多的。

(1)氣泡排序是比較相鄰位置的兩個數,而選擇排序是將一個數與它後面的所有數進行比較,找最大值或者最小值;

(2)氣泡排序每一輪比較後,位置不對都需要換位置,選擇排序每一輪比較都只需要換一次位置;

(3)兩者不同的比較方式決定了氣泡排序是穩定排序演算法,選擇排序是不穩定排序演算法,舉個例子對於陣列{ 5,8,5,2,9 } ,對於選擇排序,第一遍選擇第一個元素5會和2交換,那麼原序列中2個5的相對位置前後順序就破壞了)。

將兩種排序演算法的動態圖放在一起看,會比較容易理解。

選擇排序:

0202cd161d8cdc63499a2675c8b50772.gif

氣泡排序:

dc94f4ca27929cf4e196477299e0ae49.gif