1、基本思想:
選擇排序是一種簡單直觀的排序算法,其基本原理如下:對於給定的一組記錄,經過第一輪比較後得到最小的記錄,然後將該記錄的位置與第一個記錄的位置交換;接着對不包括第一個記錄以外的其他記錄進行第二次比較,得到最小記錄並與第二個位置記錄交換;重複該過程,知道進行比較的記錄只剩下一個爲止。
2、複雜度分析:
從簡單選擇排序的過程來看,它最大的特點是交換移動數據次數相當少,這樣就節約了相應的時間。分析它的時間複雜度發現,無論是最好最差情況,其比較次數都是一樣多,第 i 趟排序需要進行 n-i 次關鍵字比較,此時需要比較次,對於交換次數而言,當最好的時候,交換0次,最差的時候,也就是初始降時,交換次數爲 n-1 次,基於最終的時間排序與交換次數總和,因此,總的時間複雜度依然爲。
儘管與冒泡排序同爲,但簡單選擇排序的性能要優於冒泡排序。
3、排序過程如下:
以數組{49,38,65,97,76,13,27,49}爲例,
4、Java實現如下:
public class SelectSort {
public static void selectSort(int[] a) {
if (a == null || a.length <= 0) {
return;
}
for (int i = 0; i < a.length; i++) {
int temp = a[i];
int flag = i; // 將當前下標定義爲最小值下標
for (int j = i + 1; j < a.length; j++) {
if (a[j] < temp) {// a[j] < temp 從小到大排序;a[j] > temp 從大到小排序
temp = a[j];
flag = j; // 如果有小於當前最小值的關鍵字將此關鍵字的下標賦值給flag
}
}
if (flag != i) {
a[flag] = a[i];
a[i] = temp;
}
}
}
public static void main(String[] args) {
int a[] = { 49,38,65,97,76,13,27,49 };
selectSort(a);
System.out.println(Arrays.toString(a));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28