js的插入排序演算法詳細介紹
排序方法有很多中,本章節通過程式碼例項和註釋詳細介紹一下插入排序演算法。
程式碼如下:
[JavaScript] 純文字檢視 複製程式碼function InsertSort(arr) { var temp, j; for (var index = 1; index < arr.length; index++) { if ((arr[index]) < (arr[index - 1])) { temp = arr[index]; j = index - 1; do { arr[j + 1] = arr[j]; j--; } while (j > -1 && (temp) < (arr[j])); arr[j + 1] = temp; } } return arr; } var theArray = [10, 15, 2, 8, 9, 8, 13, 26]; console.log(InsertSort(theArray));
以上程式碼實現了排序效果,下面介紹一下它的實現過程。
一.實現原理:
所謂插入排序其實就是從陣列開始進行比較大小,將小的插入到大的前面,其實很難單純描述清楚,只要明白程式碼的運作過程,那麼原理自然清楚了,具體可以參閱相關閱讀。
二.程式碼註釋:
1.function InsertSort(arr) {},引數為進行排序的陣列。
2.var temp, j,宣告兩個變數,temp用來儲存陣列元素值,用來做一個過渡傳遞,j用來儲存陣列的索引。
3.for(var index=1; index<arr.length; index++) {},用來規定for迴圈執行的次數。
4.if((arr[index]) < (arr[index-1])),判斷陣列兩個相鄰元素的大小,例如i是1,就是判斷第二個元素是否小於第一個元素,依次類推。
5.temp = arr[index],將索引值為i的陣列元素暫時存入變數temp,也就是較小的那個元素。
6.j = index-1,將i的值減一,也就是索引值為i的元素的上一個元素的索引。
7.do {arr[j+1] = arr[j];j--;},將大的值設定為索引值大的位置的元素值(這正是排序的目的),然後將j再減一,這個時候的索引就是當前比較大小的陣列元素的前面元素的索引值。
8.while (j>-1 && (temp) < (arr[j])),j>-1,也就是規定最小是0,也就是判斷當前比較的陣列元素中較小的那一個是否小於它們前面的元素,因為是while語句,所以會依次比較前面的元素,直到第一個陣列元素。
9.arr[j+1] = temp,將較小的值插入到指定的位置,這個位置是在比較過程中不斷變動的。
三.最後總結:
可能看了程式碼註釋感覺還是比較混亂,其實比較過程是這樣的,首先從陣列第0個和第1個元素開始比較,判斷第1個元素是否小於第0個元素,如果小於,那麼將第一個元素存入變數temp,然後將第0個元素的值設定為第1個元素的值,這個時候temp無法再向前比較了,因為在j--之後,已經小於0了,所以就將temp的值設定為j+1位置上的值也就是第一個元素的值,然後再開始比較第1個和第2個元素值的大小,如果第2個的值小於第1個,那麼將第3個的值賦值給temp,然後將第1個的值賦值給第2個,然後temp和第0個進行比較,如果小於第0個的值,那麼再將第0個值設定為第2個的值,這時又因為j小於0了,所以將temp的值設定為第1個的值,依次類推。總的來說就是將小的值插入大的值的前面。
相關文章
- AES 加密演算法的詳細介紹加密演算法
- ApplicationContext 詳細介紹APPContext
- JDBC 詳細介紹JDBC
- javascript this詳細介紹JavaScript
- Git詳細介紹Git
- Ifconfig詳細介紹
- Kafka詳細介紹Kafka
- Http Module 的詳細介紹HTTP
- 註解的詳細介紹
- SOLIDWORKS API詳細介紹SolidAPI
- Nacos 介面詳細介紹
- python字典詳細介紹Python
- Go Channel 詳細介紹Go
- Spring bean詳細介紹SpringBean
- spring @component 的作用詳細介紹Spring
- PHP 的Closure的bind 詳細介紹PHP
- 【SCN】Oracle SCN 詳細介紹Oracle
- Flutter系列(一)——詳細介紹Flutter
- Nginx服務詳細介紹Nginx
- LVM詳細介紹及建立LVM
- Webpack 打包 Javascript 詳細介紹WebJavaScript
- Java異常詳細介紹Java
- rqt的安裝及詳細介紹QT
- 超詳細的介紹Python語句Python
- JavaScript FormData的詳細介紹及使用JavaScriptORM
- BN(Batch Normalization)層的詳細介紹BATORM
- Dart語言詳解(一)——詳細介紹Dart
- oracle 大頁配置詳細介紹Oracle
- pyhanlp 文字聚類詳細介紹HanLP聚類
- TreeViewTemplate移動元件詳細介紹View元件
- Cypress系列(2)- Cypress 框架的詳細介紹框架
- tensorboard 視覺化的最詳細介紹ORB視覺化
- Python安裝PyMongo的方法詳細介紹PythonGo
- useRoute 函式的詳細介紹與使用示例函式
- 網站實現HTTPS的詳細流程介紹網站HTTP
- 《蝙蝠的“自我修養”》專案詳細介紹
- Java開源的混淆器 Proguard詳細介紹Java
- 從 RGB 到 HSV 的轉換詳細介紹
- CJ/T188-2004 詳細介紹