成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:說說你對選擇排序的理解?如何實現?應用場景?

開發 前端
選擇排序(Selection sort)是一種簡單直觀的排序算法,無論什么數據進去都是 O(n2)的時間復雜度,所以用到它的時候,數據規模越小越好。

[[427685]]

本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯系JS每日一題公眾號。

一、是什么

選擇排序(Selection sort)是一種簡單直觀的排序算法,無論什么數據進去都是 O(n2)的時間復雜度,所以用到它的時候,數據規模越小越好

其基本思想是:首先在未排序的數列中找到最小(or最大)元素,然后將其存放到數列的起始位置

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

以此類推,直到所有元素均排序完畢

舉個例子,一個數組為 56、12、80、91、29,其排序過程如下:

  • 第一次遍歷時,從下標為 1 的位置即 56 開始,找出關鍵字值最小的記錄 12,同下標為 0 的關鍵字 56 交換位置。此時數組為 12、56、80、91、20

  • 第二次遍歷時,從下標為 2 的位置即 56 開始,找出最小值 20,同下標為 2 的關鍵字 56 互換位置,此時數組為12、20、80、91、56

  • 第三次遍歷時,從下標為 3 的位置即 80 開始,找出最小值 56,同下標為 3 的關鍵字 80 互換位置,此時數組為 12、20、56、91、80

第四次遍歷時,從下標為 4 的位置即 91 開始,找出最小是 80,同下標為 4 的關鍵字 91 互換位置,此時排序完成,變成有序數組

二、如何實現

從上面可以看到,對于具有 n 個記錄的無序表遍歷 n-1 次,第i 次從無序表中第 i 個記錄開始,找出后序關鍵字中最小的記錄,然后放置在第 i 的位置上

直至到從第n個和第n-1個元素中選出最小的放在第n-1個位置

如下動畫所示:

 

用代碼表示則如下:

  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; 

第一次內循環比較N - 1次,然后是N-2次,N-3次,……,最后一次內循環比較1次 共比較的次數是 (N - 1) + (N - 2) + ... + 1,求等差數列和,得 (N - 1 + 1)* N / 2 = N^2 / 2,舍去最高項系數,其時間復雜度為 O(N^2)

從上述也可以看到,選擇排序是一種穩定的排序

三、應用場景

和冒泡排序一致,相比其它排序算法,這也是一個相對較高的時間復雜度,一般情況不推薦使用

但是我們還是要掌握冒泡排序的思想及實現,這對于我們的算法思維是有很大幫助的

參考文獻

https://baike.baidu.com/item/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F/9762418

https://zhuanlan.zhihu.com/p/29889599

http://data.biancheng.net/view/72.html 

https://leetcode-cn.com/problems/sort-an-array/solution/shi-er-chong-pai-xu-suan-fa-bao-ni-man-yi-dai-gift/

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2021-10-08 09:59:32

冒泡排序場景

2021-10-13 18:01:33

快速排序場景

2021-10-11 09:38:41

開源

2021-10-12 07:15:02

歸并排序場景

2021-09-29 07:24:20

場景數據

2021-09-28 07:12:09

測試路徑

2021-09-16 07:52:18

算法應用場景

2021-11-05 07:47:56

代理模式對象

2021-11-09 08:51:13

模式命令面試

2021-11-10 07:47:49

組合模式場景

2021-08-16 08:33:26

git

2021-11-03 14:10:28

工廠模式場景

2021-09-06 10:51:27

TypeScriptJavaScript

2021-11-11 16:37:05

模板模式方法

2021-11-22 23:50:59

責任鏈模式場景

2021-10-14 07:55:20

二分查找面試

2021-09-10 06:50:03

TypeScript裝飾器應用

2021-09-08 07:49:34

TypeScript 泛型場景

2021-11-04 06:58:32

策略模式面試

2021-05-31 10:35:34

TCPWebSocket協議
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区在线播放 | 亚洲欧美成人在线 | 国产日韩欧美在线观看 | 日韩一| 成人福利电影 | 奇米超碰在线 | 亚洲精品久久久久久首妖 | 天天干国产 | 美女在线观看国产 | 亚洲一区在线播放 | 九九热精品视频 | 337p日本欧洲亚洲大胆鲁鲁 | 久久男人天堂 | 欧美h版| 精品久久久久久亚洲精品 | 中文字幕爱爱视频 | 亚洲激情在线观看 | 99热精品国产 | 日韩一级不卡 | 精品九九九 | 色毛片 | 中文字幕成人av | 精品国产精品国产偷麻豆 | 免费视频一区二区三区在线观看 | 成人一区二区三区 | 国产激情在线 | 精品久久影院 | 午夜网| 欧美在线日韩 | 免费小视频在线观看 | 国产精品一区二区三区久久 | 亚洲一区 | 亚洲精品电影在线观看 | 国产精品久久国产精品99 | 韩日一区二区 | 高清成人av | 亚洲欧美视频一区 | 99热精品久久 | 免费观看一级毛片视频 | 91久久精品一区二区二区 | 国产精品日产欧美久久久久 |