1. 程式人生 > 實用技巧 >十大經典排序演算法(二、選擇排序)

十大經典排序演算法(二、選擇排序)

演算法步驟

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。

重複第二步,直到所有元素均排序完畢。

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 }