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


    动图演示

    算法步骤

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

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

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

    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 }
  • 相关阅读:
    1015词法分析
    0909作业
    华为云专家来公司
    SVN与Git的优点差异比较
    eclipse快捷键大全
    Servlet,HttpServletRequest 和 HttpServletResponse
    XML
    JDBC
    XMIND快捷键
    java数据
  • 原文地址:https://www.cnblogs.com/wangchaoguo-li/p/14205573.html
Copyright © 2020-2023  润新知