日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js 排序算法总结

發(fā)布時間:2023/11/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js 排序算法总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.冒泡排序?

平均時間復(fù)雜度O(N2) 最好情況O(N)最壞情況O(N2) 空間復(fù)雜度O(1)

function bubbleSort(arr){if(arr.length <= 1)return arr;var flag = 1; // 標(biāo)識是否進(jìn)行交換for(var i=0; i < arr.length; i++){if(i !=0 && flag) break;for(var j=0; j < arr.length-i-1; j++){if(arr[j] > arr[j+1]){if(flag == 1) flag = 0;var temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}} }return arr; } var a = [2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]; console.log(bubbleSort(a));

升級版冒泡排序

function bubbleSort2(arr) {var low = 0;var high= arr.length-1; //設(shè)置變量的初始值var tmp,j;console.time('2.改進(jìn)后冒泡排序耗時');while (low < high) {for (j= low; j< high; ++j) { //正向冒泡,找到最大者if (arr[j]> arr[j+1]) {tmp = arr[j]; arr[j]=arr[j+1];arr[j+1]=tmp;}}--high; //修改high值, 前移一位for (j=high; j>low; --j) { //反向冒泡,找到最小者if (arr[j]<arr[j-1]) {tmp = arr[j]; arr[j]=arr[j-1];arr[j-1]=tmp;}} ++low; //修改low值,后移一位   }console.timeEnd('2.改進(jìn)后冒泡排序耗時');return arr; } var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; console.log(bubbleSort2(arr));

?

2.選擇排序

平均時間復(fù)雜度O(N2) 最好情況O(N2)最壞情況O(N2) 空間復(fù)雜度O(1)? 適合小數(shù)據(jù)(1000以內(nèi))排序

function selectionSort(arr) {var len = arr.length;var minIndex, temp;console.time('選擇排序耗時');for (var i = 0; i < len - 1; i++) {minIndex = i;for (var j = i + 1; j < len; j++) {if (arr[j] < arr[minIndex]) { //尋找最小的數(shù)minIndex = j; //將最小數(shù)的索引保存       }}temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}console.timeEnd('選擇排序耗時');return arr; } var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; console.log(selectionSort(arr));

3. 插入排序

平均時間復(fù)雜度O(N2) 最好情況O(N)最壞情況O(N2) 空間復(fù)雜度O(1)

function insertionSort(array) {console.time('插入排序耗時:');for (var i = 1; i < array.length; i++) {var key = array[i];var j = i - 1;while ( array[j] > key) {array[j + 1] = array[j];j--;}array[j + 1] = key;}console.timeEnd('插入排序耗時:');return array; } var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; console.log(insertionSort(arr));

升級版(通過二分法查找左邊有序數(shù)組中待差數(shù)字的插入位置)

function binaryInsertionSort(array) {console.time('二分插入排序耗時:');for (var i = 1; i < array.length; i++) {var key = array[i], left = 0, right = i - 1;while (left <= right) {var middle = parseInt((left + right) / 2);if (key < array[middle]) {right = middle - 1;} else {left = middle + 1;}}for (var j = i - 1; j >= left; j--) {array[j + 1] = array[j];}array[left] = key;}console.timeEnd('二分插入排序耗時:');return array; } var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; console.log(binaryInsertionSort(arr));

4. 快速排序

平均時間復(fù)雜度O(NlogN) 最好情況O(NlogN)最壞情況O(N2) 空間復(fù)雜度O(logN)

function quickSort(arr){if(arr.length <= 1) return arr;var pivotIndex = Math.floor(arr.length/2);var pivot = arr.splice(pivotIndex,1)[0];var left = [];var right = [];for(var i = 0; i < arr.length; i++){if(arr[i] < pivot){left.push(arr[i]);}else{right.push(arr[i]);}}return quickSort(left).concat([pivot],quickSort(right)); } var arr=[2,3,1]; console.log(quickSort(arr));

?

轉(zhuǎn)載于:https://www.cnblogs.com/fjl-vxee/p/8549358.html

總結(jié)

以上是生活随笔為你收集整理的js 排序算法总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。