基本思想:每一次從待排序的元素中選出最大(最小)的乙個元素,存放在序列的最後(起始)位置,直到待排序的元素變為有序 。
選擇排序演算法通過選擇和交換來實現排序,其排序流程如下:
其**實現如下:
我們對選擇排序演算法進行優化**如下:void
swap
(int
* left,
int* right)
void
selectsort
(int
* array,
int size)
if(maxpos != size -
1- i)
swap
(&array[maxpos]
,&array[size - i -1]
);}}
可以同時找到最大最小位置
將最大數移至末尾
將最小數移至開始
時間複雜度:o(n^2)//對定位元素選擇時方法做以改進
void
selectsort
(int
* array,
int size)
//注意:最右側位置可能儲存的是當前的最小值
if(maxpos != end)
swap
(&array[maxpos]
,&array[end]);
//若最右側可能儲存的是當前的最小值,經過上述的交換後,最小值的位置發生了變化
//更新minpos的值
if(minpos != end)
minpos = maxpos;
if(minpos != begin)
swap
(&array[minpos]
,&array[begin]);
++begin;
--end;
}}
空間複雜度:o(1)
穩定性:不穩定
資料結構 直接選擇排序
直接選擇排序和直接插入排序有點類似,因為在整個排序過程中都將資料分為有序區和無序區,不同的是直接插入排序是將無序區的第乙個元素直接插入到有序區中合適位置以形成乙個更大的有序區,剛開始認為有序區的長度為1,而直接選擇排序是從無序區選乙個最小的元素直接放到有序區的最後,剛開始認為它的有序區長度為0。設待...
資料結構 直接選擇排序
直接選擇排序 straight select sorting 也是一種簡單的排序方法,它的基本思想是 第一次從r 0 r n 1 中選取最小值,與r 0 交換,第二次從r 1 r n 1 中選取最小值,與r 1 交換,第i次從r i 1 r n 1 中選取最小值,與r i 1 交換,第n 1次從r ...
資料結構 選擇排序(直接選擇 堆排序)
1 選擇排序的基本思想 每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置 或末尾 直到全部待排序的資料元素排完。選擇排序可分為直接選擇排序 堆排序。2 直接選擇排序 2.1 演算法步驟 1.在元素集合array i array n 1 中選擇關鍵碼最大 小 的資料元素 2...