sort()函數到底是怎樣進行數字排序的

来源:http://www.cnblogs.com/realcare/archive/2016/11/05/6032721.html
-Advertisement-
Play Games

很多人會用sort(),並不見得知道它具體是怎樣給數字排序的。其實不知道也行,會用就可以,感興趣的可以來看看。 用過sort()函數的都知道上面代碼其實就是將數組裡的元素從小到大排序,返回結果[1,2,3,4]。 為了弄清楚sort()是怎樣進行數字比較和移動,最後排好序的,我加三行代碼,讓它把每一 ...


 

很多人會用sort(),並不見得知道它具體是怎樣給數字排序的。其實不知道也行,會用就可以,感興趣的可以來看看。

1  var numberArray = [2,4,1,3];
2  numberArray.sort(function(a,b){  
3     return a-b; //從小到大
4  })

用過sort()函數的都知道上面代碼其實就是將數組裡的元素從小到大排序,返回結果[1,2,3,4]。

為了弄清楚sort()是怎樣進行數字比較和移動,最後排好序的,我加三行代碼,讓它把每一次比較的結果,以及a和b的值都顯示在控制臺上。

 1 var numberArray = [2,4,1,3];
 2 
 3 res=numberArray.sort(function(a,b){  
 4    console.log(numberArray);
 5    console.log(a); 
 6    console.log(b);
 7    return a-b; 
 8    
 9 })
10 console.log(res);

控制台顯示內容:

紅色字體是我標記的,以便理解。

咱們看一下,一開始數組是[2,4,1,3],從小到大排序是從左邊開始兩兩比較,首先2和4比較,2<4,倆數字位置不變;繼續向右走,4和1比較,4>1,將4放在原來1的位置上;那麼一開始比4小的2與1的大小關係呢,這會兒再進行比較,2>1,那就1在前,2在後;以此類推。這種排序方法叫做冒泡排序。

函數內部咱們也可以寫出來:

 1 function bubbleSort(arr) {
 2     var i = arr.length, j;
 3     var tempExchangVal;
 4     while (i > 0) {
 5         for (j = 0; j < i - 1; j++) {
 6             if (arr[j] > arr[j + 1]) {
 7                 tempExchangVal = arr[j];
 8                 arr[j] = arr[j + 1];
 9                 arr[j + 1] = tempExchangVal;
10             }
11         }
12         i--;
13     }
14     return arr;
15 }

如果是sort()函數從大到小排序,則是從左向右兩兩進行比較,大的放在左邊。下麵來看一下代碼和控制台顯示:

 1 var numberArray = [2,4,1,3];
 2 
 3 res=numberArray.sort(function(a,b){  
 4    console.log(numberArray);
 5    console.log(a); 
 6    console.log(b);
 7    return b-a; //從大到小
 8    
 9 })
10 console.log(res);

以上就是sort()函數的具體比較方法,如有表述不正確之處,望大家賜教,謝謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目前來看,團隊內部前端項目已全面實施組件化開發。組件化的好處太多,如:按需載入、可復用、易維護、可擴展、少挖坑、不改組件代碼直接切成伺服器端渲染(如 "Nuclear" 組件化可以做到,大家叫同構)... 怎麼做到這麼強大的優勢,來回憶下以前見過的坑,或者現有項目里的坑。 CSS層疊樣式?保佑不要污 ...
  • 1. 使用require.js的意義 (1)實現JS文件的非同步載入,避免網頁因為載入JS文件緩慢造成網頁未響應 (2)管理模塊之間的依賴性,便於代碼的編寫和維護。頁面中只需要引入require.js和main.js,其餘的js文件全部通過require.js管理。 2. 獲取require.js r ...
  • 本文版權歸博客園和作者本人共同所有,轉載和爬蟲請註明原文地址。 寫在前面 好多做web開發的朋友,在學習數據結構和演算法時可能比較討厭C和C++,上學的時候寫過的也忘得差不多了,更別提沒寫過的了。但幸運的是,你會JavaScript啊。我想說學好數據結構和基本演算法並非是要我們必須要去書寫,演算法的工作有 ...
  • 總結一下自己在寫這個需求遇到的問題,相信大家應該是經常遇到的。即要求滾輪滾動到指定的位置。先看下基本的解決方案。 1.給鏈接a加個#的方式來實現跳轉。(錨點方法)這裡直接貼下代碼: html頁面: css樣式: 該錨點法,不需要任何的js代碼,即可實現跳轉的方法。缺點:點擊鏈接url發生變化,刷新的 ...
  • 一、Redux介紹 Redux的設計思想很簡單,就兩句話: 二、Redux基本概念和API Store Store就是保存數據(state)的地方,整個應用只能有一個Store。Redux通過createStore來生成store。 State Store對象包含所有State,某一時刻的數據集合就 ...
  • 在WebGL場景中導入多個Babylon骨骼模型,在區域網用WebSocket實現多用戶交互控制。 ...
  • 時光轉眼即逝,又到周六了,今天寫點某部分人看不起的css玩玩! 轉換 轉換屬性transform: 瀏覽器首碼: -webkit-transform;-o-transform;-moz-transform;-ms-transform; 取值: none : 預設值,沒有轉換操作 transform- ...
  • 1、操作元素之屬性: ①attr讀:$(“selector”).attr(“屬性名”);=>getAttribute(“屬性名”);改:$(“selector”).attr(“屬性名”,值);=>setAttribute(“屬性名”,值);*(*無法訪問不再開始標簽中存在的prop屬性;例:chec ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...