排序演算法(二)簡單選擇排序

2021-06-21 22:25:45 字數 1198 閱讀 7270

一、介紹

1、氣泡排序的基本思想就是不斷地比較、交換,通過交換完成最終的排序;而相比氣泡排序來說,選擇排序法的基本思想是在排序時找到合適的關鍵字再做交換,且只移動一次就完成相應關鍵字的排序定位,也就是說每一趟在n - i + 1(i = 1, 2......, n - 1)個記錄中選取關鍵字最小的記錄作為有序序列的第i個記錄。

二、簡單選擇排序演算法

1、簡單選擇排序法(****** selection sort)就是每次通過n - i次關鍵字間的比較,從n - i + 1個記錄中選出關鍵字最小的記錄,並和第i(1<=i<=n)個記錄進行交換。

2、簡單選擇排序演算法實現

#include // 定義待排序記錄型別

typedef int recordtype;

/** * 將待排序記錄陣列的下標i和下標j的兩個記錄進行交換

*/void swap(recordtype *rs, int i, int j)

/** * 列印待排序記錄陣列

*/void printrs(recordtype rs)

printf("\n");

}/**

* 對記錄列表進行簡單選擇排序

*/void ******selectionsort(recordtype *rs)

}// 該趟比較完畢,如果min不再指向初始記錄下標,說明找到了更小的記錄,則進行交換

if (min != i)

}}int main()

; printf("排序前記錄列表排序為:\t\t");

printrs(rs);

******selectionsort(rs);

printf("從小到大排序後,記錄列表排序為:");

printrs(rs);

return 0;

}

3、時間複雜度

從以上簡單選擇排序的實現來看,最大的特點就是減少了每一趟比較過程中的記錄交換次數,所以能節約不少時間。對於時間複雜度來說,無論是最好還是最壞情況,其比較次數都是一樣的,對於第i趟排序需要進行n - i次關鍵字的比較,所以共需要比較n(n - 1)/2次;但是對於交換次數來說,最好的情況就是記錄本身有序,無需交換;最壞情況就是記錄是倒序排列的,交換次數需要n - 1次,基於最終的排序時間是比較和交換的次數總和,所以總的時間複雜度為o(n^2)。

排序演算法 選擇排序 簡單選擇排序

package 選擇排序 簡單選擇排序 不穩定 基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。public class 簡單選擇排序 system.out.println 排序之前 f...

排序演算法 簡單選擇排序

簡單選擇排序是一種選擇排序。1.簡單選擇排序的定義 每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。2.簡單選擇排序的流程 例項 注 紅色數字是位置發生變化的數值。3.簡單選擇排序的 實現 public class selectsort 若min有變化,...

排序演算法 簡單選擇排序

簡單選擇排序法就是通過n i次關鍵字比較,找到最小的關鍵字下標,最後在替換n i下標和最小下標的值。簡單排序的思想和氣泡排序的思想的區別是氣泡排序是相鄰關鍵字兩兩比較,如果小,則直接替換,可能在一輪迴圈會進行多次值交換。而簡單選擇排序法是一輪迴圈找到最小關鍵字下標,最後進行最多一次替換。public...