簡單選擇排序

2021-09-06 07:35:50 字數 842 閱讀 4247

簡單選擇排序(****** selection sort)是通過n – i次關鍵字之間的比較,從n – i + 1個記錄中選出關鍵字最小(大)的記錄,並和第i(1≤i≤n)個記錄交換。

這種排序演算法簡單直觀,首先從未排序序列中找到最小(大)元素,存放到排序序列的起始位置。然後再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

選擇排序的主要優點與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有乙個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。

演算法實現及測試:

#include using

namespace

std;

//選擇排序

void selectsort(int data, int

count)

if (i !=min)

}}int

main()

; selectsort(array, 9);

for(int i = 0; i < 9; ++i)

cout

<< array[i]

}

簡單選擇排序的比較次數為o(n ^ 2),總的比較次數n = (n-1) + (n-2) + … + 1 = n*(n-1)/2。交換次數為o(n),最好情況是關鍵字初始有序,交換0次,最壞情況時關鍵字初始逆序,交換n-1次。簡單選擇排序的交換次數比氣泡排序少很多,由於交換操作所需的cpu時間比比較操作所需的cpu時間多,所以n值較小時,選擇排序要優於氣泡排序。

【學習資料】 《大話資料結構》 《維基百科》

簡單選擇排序 簡單選擇排序詳解

n個記錄的檔案的直接選擇排序可經過n 1趟直接選擇排序得到有序結果 初始狀態 無序區為r 1.n 有序區為空。第1趟排序 在無序區r 1.n 中選出關鍵字最小的記錄r k 將它與無序區的第1個記錄r 1 交換,使r 1.1 和r 2.n 分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區...

選擇排序 簡單選擇排序

在要排序的一組數中,選出最小 或者最大 的乙個數與第1個位置的數交換 然後在剩下的數當中再找最小 或者最大 的與第2個位置的數交換,依次類推,直到第n 1個元素 倒數第二個數 和第n個元素 最後乙個數 比較為止。第一趟,從n個記錄中找出關鍵碼最小的記錄與第乙個記錄交換 第二趟,從第二個記錄開始的n ...

選擇排序 簡單選擇排序

1.選擇排序 簡單選擇排序,堆排序 與交換排序 氣泡排序,快速排序 的區別 每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。而選擇排序演算法的改進在於 先並不急於調換位置,先從a 1 開始逐個檢查,看哪個數最小就記下該數所在的位置p,等一躺掃瞄完畢,再把a p 和a 1 對調,這時a 1 到...