基本思想:在資料中,每一趟(第i趟,i = 0,1,2,3…,n-2)在後面n-i個待排序的資料元素集合中選出關鍵碼最小的資料元素,作為有序元素序列的第i個元素,待到第n-2趟做完,待排序元素集合只剩下1個元素,排序結束。
直接選擇排序:得到乙個待排序的元素集合,我們先預設第乙個元素為最小元素,用min標記起來。在待排序元素集合中,依次比較大小,如果比min標記的元素小,就把min標記到小的哪乙個元素。直到元素比完,找到最小的元素,然後與第乙個元素交換位置。
空間複雜度o(1) ;
時間複雜度o(n*n) ; 要排n個元素,每次比較n-1次,找到min,要n*(n-1)次才能排位
適用場景:資料規模小(n比較小)
穩定性:不穩定
直接排序優化:
一次找出min,max,把min,max分別與第left個元素,第right個元素交換,left >= right 時,排序結束。
void selectsort_op(int
*array, int
size)
std:swap(array[max], array[right]);
if (min == right) //考慮最小值在right的情況
min = max;
swap(array[min], array[left]);
left++;
right--;}}
要排n個元素,排完需要經常 n(n-1)/2 次
時間複雜度:o(n*n)
排序 選擇排序 選擇排序 堆排序
寫在前面 上傳github交換排序選擇排序 堆排序 選擇排序 顧名思義,我們就可以猜到,它是原則合適的元素放到合適的位置 從圖中,我們可以得到 1.用第乙個元素,和其他所有的元素進行比較,找出最小的,然後進行交換 2.然後進行,資料的遞增 3.直到資料全部有序 void selectsort int...
排序 選擇排序(直接選擇排序 堆排序)
選擇排序 selection sort 的基本思想是 每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子檔案的最後,直到全部記錄排序完畢。常用的選擇排序方法有 直接選擇排序 和堆排序。直接選擇排序 straight selection sort 1 直接選擇排序的基本思想 n個記錄的檔...
排序2 選擇排序 選擇排序 堆排序
選擇排序,依次找到資料集n n 1 n 2 中比它大 小的最大 最小者,最終達到全部資料有序。1 選擇排序 直接的依次找到資料集合n n 1 n 2.的最大 最小者形成排序,非常好理解。選擇排序可能是和氣泡排序一樣,最直觀能想到的排序方法。顯然選擇排序和氣泡排序一樣,無所謂最好 最壞 平均,選擇排序...