當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
数组的合并和升序排列_JavaScript - 数组排序 6 种常见算法是什么?
生活随笔
收集整理的這篇文章主要介紹了
数组的合并和升序排列_JavaScript - 数组排序 6 种常见算法是什么?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
著急用的話,選擇前兩個就行了,后面的看看就好。開發中,遇到數組排序的需求很頻繁,這篇文章會介紹幾個常見排序思路。
一、希爾排序(性能最好)
如果要從大到小排列,則 while(arr[n] > arr[n - interval] && n > 0) 。
// 希爾排序算法 function xier(arr){var interval = parseInt(arr.length / 2);//分組間隔設置while(interval > 0){for(var i = 0 ; i < arr.length ; i ++){var n = i;while(arr[n] < arr[n - interval] && n > 0){var temp = arr[n];arr[n] = arr[n - interval];arr[n - interval] = temp;n = n - interval;}}interval = parseInt(interval / 2);}return arr; }// Array var arr = [10, 20, 40, 60, 60, 0, 30]// 打印排序后的數組 console.log(xier(arr))//[0, 10, 20, 30, 40, 60, 60]二、sort排序(普通數組 / 數組嵌套對象)
一堆數組排序// Array var arr = [10, 20, 40, 60, 60, 0, 30]// 排序方法 arr.sort(function(a,b){/** return b-a; —> 降序排序* return a-b; —> 升序排列*/return a-b; })//括號里不寫回調函數則默認按照字母逐位升序排列// 打印排序后的數組 console.log(arr)//[0, 10, 20, 30, 40, 60, 60] 對象數組排序(數組套對象)//對象數組排序 var arr = [{name:'syy', age:0},{name:'wxy', age:18},{name:'slj', age:8},{name:'wj', age:20} ];// 排序方法 function compare(property) {//property:根據什么屬性排序return function(a,b){var value1 = a[property];var value2 = b[property];/** value2 - value1; ——> 降序* value1 - value2; ——> 升序*/return value1 - value2;//升序排序} }// 打印排序后的數組 console.log(arr.sort(compare('age'))) /* 0: {name: "syy", age: 0} 1: {name: "slj", age: 8} 2: {name: "wxy", age: 18} 3: {name: "wj", age: 20} */三、桶排序
特點:簡單,但非常浪費內存,幾乎不用。桶中出現的數組元素都做個標記 1,然后將桶數組中有 1 標記的元素依次打印。
// Array var arr = []// 每個數組項做標記(1) for(let i = 0; i < arr.length; i++) {let key = arr[i]arr[key] = 1 }// 遍歷打印出每項 for(let j in arr) {debuggerconsole.log(j) }四、冒泡排序
性能:一般(需要每項進行比較)。每一趟找出最大的值。
// Array var arr = [10, 20, 40, 60, 60, 0, 30]/* * 總共比較次數為arr.length-1次 * 每次的比較次數為arr.length-1次 * 依次遞減 */ var temp;//交換變量標識// 兩層for分別表示當前項與第二項 for(let i = 0; i < arr.length - 1; i++) {for(let j = 0; j < arr.length - 1; j++) {// 如果當前項大于第二項(后一項)則交換if(arr[j] > arr[j+1]) {temp = arr[j]arr[j] = arr[j+1];arr[j+1] = temp;}} }// 打印排序后的數組 console.log(arr)//[0, 10, 20, 30, 40, 60, 60]五、選擇排序
性能:一般(需要每項進行比較)。假定某個位置的值是最小值,與冒泡排序類似。
// Array var arr = [10, 20, 40, 60, 60, 0, 30]var temp;//交換變量標識// 兩層for分別表示當前項與第二項 for(let i = 0; i < arr.length - 1; i++) {for(let j = i + 1; j < arr.length; j++) {// 假設第二項是最小值(是則交換/否則繼續比較)if(arr[i] > arr[j]) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;}} }// 打印排序后的數組 console.log(arr)//[0, 10, 20, 30, 40, 60, 60]六、插入排序
// Array var arr = [10, 20, 40, 60, 60, 0, 30]// 排序算法 for(var i = 0; i < arr.length; i++) {var n = i;while(arr[n] > arr[n+1] && n >= 0) {var temp = arr[n];arr[n] = arr[n+1];arr[n+1] = temp;n--;} }// 打印排序后的數組 console.log(arr)//[0, 10, 20, 30, 40, 60, 60]————————————————
版權聲明:本文為CSDN博主「王佳斌」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:
JavaScript - 數組排序 6 種常見算法?blog.csdn.net總結
以上是生活随笔為你收集整理的数组的合并和升序排列_JavaScript - 数组排序 6 种常见算法是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux vnc的小黑点和鼠标不同步_
- 下一篇: python建立列表_python创建列