js 排序算法總結

1.冒泡排序?

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

function bubbleSort(arr){if(arr.length <= 1)return arr;var flag = 1;             // 標識是否進行交換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; //設置變量的初始值var tmp,j;console.time('2.改進后冒泡排序耗時');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.改進后冒泡排序耗時');return arr;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(bubbleSort2(arr));

?

2.選擇排序

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

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]) { //尋找最小的數minIndex = j; //將最小數的索引保存
      }}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. 插入排序

平均時間復雜度O(N2) 最好情況O(N)最壞情況O(N2) 空間復雜度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));

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

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. 快速排序

平均時間復雜度O(NlogN) 最好情況O(NlogN)最壞情況O(N2) 空間復雜度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));

?

轉載于:https://www.cnblogs.com/fjl-vxee/p/8549358.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390069.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390069.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390069.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

524. 通過刪除字母匹配到字典里最長單詞

524. 通過刪除字母匹配到字典里最長單詞 給你一個字符串 s 和一個字符串數組 dictionary 作為字典&#xff0c;找出并返回字典中最長的字符串&#xff0c;該字符串可以通過刪除 s 中的某些字符得到。 如果答案不止一個&#xff0c;返回長度最長且字典序最小的字符串。如果答案…

django開發商城(提供初始數據,商城首頁及購物車)

1.爬取數據 2.json數據轉化為sql語句 3.新建輪播圖模型(模型名與sql語句對應表名相同) class Wheel(models.Model):imgmodels.CharField(max_length150)namemodels.CharField(max_length20)trackidmodels.CharField(max_length20) 4.終端打開mysql,執行插入語句 5.在首頁進行展…

多語言版希爾排序

2019獨角獸企業重金招聘Python工程師標準>>> 簡介 希爾排序(Shells Sort)是插入排序的一種又稱“縮小增量排序”&#xff08;Diminishing Increment Sort&#xff09;&#xff0c;是直接插入排序算法的一種更高效的改進版本。希爾排序是非穩定排序算法。該方法因D.L…

UML 中extend和include的區別

在UML用例圖中有兩種關系——包含和擴展&#xff0c;容易混淆&#xff0c;下面通過一張表來區別一下這兩種關系。 轉載于:https://www.cnblogs.com/yonyong/p/8555547.html

hdu 6301 Distinct Values(貪心)題解

題意&#xff1a;長為n的串&#xff0c;給你m個區間&#xff0c;這些區間內元素不重復&#xff0c;問這樣的串字典序最小為&#xff1f; 思路&#xff1a;用set保存當前能插入的元素&#xff0c;這樣就能直接插入最小元素了。對操作按l排序&#xff0c;因為排過的不用排&#x…

瀏覽器兼容CSS漸進增強 VS 優雅降級如何選擇

由于低級瀏覽器不支持 CSS3&#xff0c;但是 CSS3 特效太優秀不忍放棄&#xff0c;所以在高級瀏覽器中使用CSS3&#xff0c;而在低級瀏覽器只保證最基本的功能。二者的目的都是關注不同瀏覽器下的不同體驗&#xff0c;但是它們側重點不同&#xff0c;所以導致了工作流程上的不同…

細數sass安裝中遇到的坑

前言&#xff1a; 前兩天打算清理電腦的時候&#xff0c;遇到了一點特殊的問題&#xff0c;打算重裝一些東西&#xff0c;其中就有我一直用的順手的SASS預編譯工具。 但是在重裝的時候&#xff0c;我發現我居然不會用了&#xff1f;&#xff1f;&#xff1f; 靠&#xff0c;要不…

442. 數組中重復的數據

442. 數組中重復的數據 給定一個整數數組 a&#xff0c;其中1 ≤ a[i] ≤ n &#xff08;n為數組長度&#xff09;, 其中有些元素出現兩次而其他元素出現一次。 找到所有出現兩次的元素。 你可以不用到任何額外空間并在O(n)時間復雜度內解決這個問題嗎&#xff1f; 示例&am…

[bzoj 2726] 任務安排 (斜率優化 線性dp)

3月14日第三題&#xff01;&#xff01;&#xff01;&#xff08;雖然是15號發的qwq&#xff09; Description 機器上有N個需要處理的任務&#xff0c;它們構成了一個序列。這些任務被標號為1到N&#xff0c;因此序列的排列為1,2,3…N。這N個任務被分成若干批&#xff0c;每批…

2018年,牛客網小白月賽5

第一次啊&#xff0c;補題&#xff0c;希望大佬批評。 題目按我補題順序來的。 https://www.nowcoder.com/acm/contest/135#question H 題 最大公倍數 題意:給出兩個數&#xff0c;求最大公倍數 歐幾里德算法算出最大公約數k; 然后算出。最大公倍數即可 代碼如下&#xff1a; …

292. Nim 游戲

292. Nim 游戲 你和你的朋友&#xff0c;兩個人一起玩 Nim 游戲&#xff1a; 桌子上有一堆石頭。你們輪流進行自己的回合&#xff0c;你作為先手。每一回合&#xff0c;輪到的人拿掉 1 - 3 塊石頭。拿掉最后一塊石頭的人就是獲勝者。 假設你們每一步都是最優解。請編寫一個函…

0710 mux協議的作用(ppp撥號時如何和gprs進行at指令交互)

ppp撥號使gprs上網的同時如何和gprs模塊進行at指令的交互&#xff0c;這是一個問題。 在linux中&#xff0c;ppp撥號上網是內核中支持的&#xff0c;只需要在內核配置中選上。 ppp撥號的方式使gprs進行上網與at指令使gprs上網&#xff0c;兩者之間有不同。ppp是一個將用at指令使…

爬蟲筆記(十二)——瀏覽器偽裝技術

為什么要進行瀏覽器偽裝技術&#xff1f; 有一些網站為了避免爬蟲的惡意訪問&#xff0c;會設置一些反爬蟲機制&#xff0c;對方服務器會對爬蟲進行屏蔽。常見的飯爬蟲機制主要有下面幾個&#xff1a; 1. 通過分析用戶請求的Headers信息進行反爬蟲 2. 通過檢測用戶行為進行反…

650. 只有兩個鍵的鍵盤

650. 只有兩個鍵的鍵盤 最初記事本上只有一個字符 ‘A’ 。你每次可以對這個記事本進行兩種操作&#xff1a; Copy All&#xff08;復制全部&#xff09;&#xff1a;復制這個記事本中的所有字符&#xff08;不允許僅復制部分字符&#xff09;。Paste&#xff08;粘貼&#x…

Codeforces 626F Group Projects (DP)

題目鏈接 8VC Venture Cup 2016 - Elimination Round 題意 把$n$個物品分成若干組&#xff0c;每個組的代價為組內價值的極差&#xff0c;求所有組的代價之和不超過$k$的方案數。 考慮DP&#xff0c;$f[i][j][k]$表示考慮到第$i$個物品的時候&#xff0c;還有$j$組尚未分配完…

《活出生命的意義》:人生有何意義?

在你一生的閱讀體驗中&#xff0c;如果能夠有一本書&#xff0c;它的某個章節、某種思想、或者某句話能夠觸動你的內心&#xff0c;解決你的困惑&#xff0c;甚至能改變你的命運&#xff0c;那這樣的一本書你一定要視如珍寶&#xff0c;經常翻閱&#xff0c;維克多弗蘭克爾的《…

右鍵添加git-bash

主要&#xff1a; 右鍵如果沒有git-bash&#xff0c;如何給右鍵手動添加 前面對右鍵存在git-bash但使用出現問題的解決&#xff0c;也想到如果右鍵都沒有&#xff0c;該如何給右鍵添加了&#xff0c;于是接著記錄下如何添加的過程&#xff1a; 情形&#xff1a; 手動給右鍵添加…

Weblogic的緩存

2019獨角獸企業重金招聘Python工程師標準>>> 最近遇到一個關于weblogic緩存的問題。再把war包放入到weblogic指定目錄啟動以后&#xff0c;訪問頁面信息沒有更新。最后發現是\weblogic\user_projects\domains\base_domain\servers\AdminServer下的文件沒有清除&…

725. 分隔鏈表

725. 分隔鏈表 給你一個頭結點為 head 的單鏈表和一個整數 k &#xff0c;請你設計一個算法將鏈表分隔為 k 個連續的部分。 每部分的長度應該盡可能的相等&#xff1a;任意兩部分的長度差距不能超過 1 。這可能會導致有些部分為 null 。 這 k 個部分應該按照在鏈表中出現的順…

LAMP介紹-MySQL安裝

2019獨角獸企業重金招聘Python工程師標準>>> LAMP: linux-apache-mysql-php &#xff08;安裝方式有&#xff1a;rpm&#xff0c;源碼&#xff0c;二進制免編譯&#xff09; linux-操作系統 apache-web服務軟件&#xff08;httpd&#xff09; mysql-存儲數據庫 php…