經典排序之 選擇排序

2022-06-22 03:12:13 字數 930 閱讀 2329

現在簡單來講一下選擇排序的思想:

我們接觸選擇排序的時間很長了,也是我們程式設計時需要最先接觸的程式。他的思想確實較簡單。

演算法思想:

選擇排序需要針對陣列從頭到尾進行掃瞄,其實就是記錄下掃瞄一遍後整個陣列的最小元素和最小元素的位置,然後和第乙個元素進行交換,這樣經過一遍排序我們就可以確定乙個元素的最終位置;然後從第二個資料開始再次迴圈掃瞄交換,直到最後;在這裡交換時有乙個優化的過程,如果最小元素的位置和之前記錄的位置一樣,則可以通過比較,避免無謂的交換,節省時間和空間。

選擇排序是乙個不穩定的排序,最好最壞和平均下來的時間複雜度都是o(n2);

演算法實現:

1 #include2

using

namespace

std;34

void swap(int &a, int &b) 910

void selectsort(int *data, int

length)

1516

for(int i = 0; i < length - 1; i++)25}

2627

if(index ==i)

3031

swap(data[i], data[index]); //交換階段32}

33}3435

intmain();

37int len = sizeof(str) / sizeof(int

);38

selectsort(str, len);

3940

for(int k = 0; k < len; k++)

4344

return0;

45 }

經典排序之 選擇排序

選擇排序和氣泡排序一樣,也是時間複雜度為o n 2 的排序。陣列 5 6 3 1 8 7 2 4,以從小到大排序為例 1 先找出從0到n 1個數中的最小數,將它與0位上的數交換 結果是1 5 6 3 8 7 2 4 2 再從1到n 1中的數找到最小,將它與1位上的數交換 3 類似一直迴圈到只剩下乙個...

經典排序之選擇排序

選擇排序 基本思想 選擇排序演算法採用的方法比較直觀 通過在待排序子表中完整地比較一遍以確定最大 小 元素,並將元素放在子表的最前 後 面。時間複雜度 o n 2 穩定性分析 該演算法是不穩定排序,因為關鍵字相同的元素在排序過程中可能會交換次序。例如,對資料表 3,3,2 排序時,由於要將第乙個3與...

經典排序之選擇排序

include int main length a.length length 10 printf before ordered n for i 0 i length i printf d a i printf n n for i 0 i length i if index i printf the...