查詢資料的排序的位置_簡單選擇排序C++實現
阿新 • • 發佈:2021-01-20
技術標籤:查詢資料的排序的位置
簡單選擇排序是每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,第一次從下標為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的相對位置前後順序就破壞了)。
將兩種排序演算法的動態圖放在一起看,會比較容易理解。
選擇排序:
氣泡排序: