十大经典排序算法(二、选择排序)

动图演示

算法步骤

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

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

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

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 }

 

posted @ 2020-12-29 11:22  梓涵VV  阅读(150)  评论(0编辑  收藏  举报