算法步骤
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
JavaScript
1 function selectionSort(arr) { 2 var len = arr.length; 3 var minIndex, temp; 4 for (var i = 0; i < len - 1; i++) { 5 minIndex = i; 6 for (var j = i + 1; j < len; j++) { 7 if (arr[j] < arr[minIndex]) { // 寻找最小的数 8 minIndex = j; // 将最小数的索引保存 9 } 10 } 11 temp = arr[i]; 12 arr[i] = arr[minIndex]; 13 arr[minIndex] = temp; 14 } 15 return arr; 16 }
Python
1 def selectionSort(arr): 2 for i in range(len(arr) - 1): 3 # 记录最小数的索引 4 minIndex = i 5 for j in range(i + 1, len(arr)): 6 if arr[j] < arr[minIndex]: 7 minIndex = j 8 # i 不是最小数时,将 i 和最小数进行交换 9 if i != minIndex: 10 arr[i], arr[minIndex] = arr[minIndex], arr[i] 11 return arr
C 语言
1 void swap(int *a,int *b) //交換兩個變數 2 { 3 int temp = *a; 4 *a = *b; 5 *b = temp; 6 } 7 void selection_sort(int arr[], int len) 8 { 9 int i,j; 10 11 for (i = 0 ; i < len - 1 ; i++) 12 { 13 int min = i; 14 for (j = i + 1; j < len; j++) //走訪未排序的元素 15 if (arr[j] < arr[min]) //找到目前最小值 16 min = j; //紀錄最小值 17 swap(&arr[min], &arr[i]); //做交換 18 } 19 }
C++
1 template<typename T> //整數或浮點數皆可使用,若要使用物件(class)時必須設定大於(>)的運算子功能 2 void selection_sort(std::vector<T>& arr) { 3 for (int i = 0; i < arr.size() - 1; i++) { 4 int min = i; 5 for (int j = i + 1; j < arr.size(); j++) 6 if (arr[j] < arr[min]) 7 min = j; 8 std::swap(arr[i], arr[min]); 9 } 10 }