選擇排序是遍歷列表,然後每次將最大或者最小的數保存到新的列表,這樣就得到了排好序的列表。選擇排序時間複雜度爲O(n^2)
實現選擇排序的基本步驟如下:
- 先從第一個元素開始,相鄰的兩個元素進行比較,最後得出第一次比較中最小的元素;
- 記錄好這個最小元素的位置,並把這個元素與第一個元素互換位置;
- 接着再從第二個元素開始,相鄰的兩個元素再進行比較,得出第二次比較中最小的元素;
- 記錄好這個最小元素的位置,並把這個元素與第二個元素互換位置;
- 如此類推…最終實現有序排列。
使用java實現選擇排序示例代碼
package com.zjx.algorithm;
public class SelectionSort {
private static void selectionSort(int[] array){
for(int i=0;i < array.length-1;i++){
int index = i;
for(int j = i+1;j< array.length;j++){
//如果第一個元素比第二個元素大,則這兩個互換位置,並記錄最小元素的位置,注意與冒泡排序的區別
if(array[index] > array[j]){
index = j;
}
}
//交換位置
if(index != i){
int temp = array[i];
array[i] = array[index];
array[index] = temp;
}
}
}
public static void main(String[] args) {
int[] array = {11,1,2,5,4,7,3,9,8,6};
selectionSort(array);
for (int i = 0;i <array.length;i++){
System.out.println(array[i]);
}
}
}
使用Python實現選擇排序示例
### 選擇排序
def findSmallest(arr):
smallest = arr[0]
smallest_index = 0;
for i in range(1,len(arr)):
if(arr[i] < smallest):
smallest = arr[i]
smallest_index = i
return smallest_index;
def selectionSort(arr):
newArr = []
for i in range(len(arr)):
smallest = findSmallest(arr)
newArr.append(arr.pop(smallest))
return newArr
print(selectionSort([7, 3, 6, 8, 10, 34, 21, 4]))