簡單選擇排序演算法只需要乙個輔助空間用於交換記錄,所以,簡單選擇排序演算法是一種穩定的排序方法。
【例】關鍵碼序列為(42,20,17,27,13,8,17,48),用簡單選擇排序演算法進行排序。
排序過程如圖所示。
選擇排序的基本思想是每一趟在n-i+1(i=1,2,…,n-1)個記錄中選取關鍵字最小的記錄作為有序序列的第i個記錄。我們這裡先介紹的是簡單選擇排序法。
簡單選擇排序法(****** selection sort)就是通過n-i次關鍵字間的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i(1≤i≤n)個記錄交換之。
從簡單選擇排序的過程來看,它最大的特點就是交換移動資料次數相當少,這樣也就節約了相應的時間。分析它的時間複雜度發現,無論最好最差的情況,其比較次數都是一樣的多,第i趟排序需要進行ni次關鍵字的比較,此時需要比較 次。而對於交換次數而言,當最好的時候,交換為0次,最差的時候,也就初始降序時,交換次數為n-1次,基於最終的排序時間是比較與交換的次數總和,因此,總的時間複雜度依然為o(n2)。
應該說,儘管與氣泡排序同為o(n
2),但簡單選擇排序的效能上還是要略優於氣泡排序。
**如下:
#include #include using namespace std;
//交換兩個資料
void swap(int *a, int *b)
//顯示交換後的陣列
void display_array( int a, int n )
//選擇排序
void select_sort( int a, int n ){
int i ,j;
for(i = 0; i < n - 1 ; i++ )
{
int min = a[i]; //每次都設定最小的數min
for(j = i+1; j
簡單選擇排序 簡單選擇排序詳解
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 到...