首頁 web前端 js教程 js演算法中的排序、陣列去重詳細概述_javascript技巧

js演算法中的排序、陣列去重詳細概述_javascript技巧

May 16, 2016 pm 05:20 PM
排序 數組去重

其實在js實現數組排序,採用數組中sort方法實作還是比較簡單的:

一、排序

簡單實作陣列排序

複製程式碼 程式碼如下:

var arr = [] ; 
for(var i=0;i    arr.push(Math.floor(Math.random()*100)) 

arr.sort(function (a,b){ 
    return a>b?1:-1; 
}) 
alert(arr)

無法簡單使用sort方法,預設情況下sort方法是按ascii字母順序排序的,而非我們認為是按數字大小排序,

sort() 方法可以接受一個 方法為參數 ,這個方法有兩個參數。分別代表每次排序比較時的兩個陣列項。 sort()排序時每次比較兩個陣列項目都回執行這個參數,並且把兩個比較的陣列

項作為參數傳遞給這個函數。當函數傳回值為1的時候就交換兩個數組項的順序,否則就不交換。

演算法的陣列排序

複製程式碼 程式碼如下:

var arr = [] ; 
for(var i=0;i    arr.push(Math.floor(Math.random()*100)) 

//生成一個無序的arr陣列 
function sort(arr,start,end){ 
    //陣列長度為1 
    if(start == end ){ 
    if(start }else if(start == end-1){ 
        //陣列長度為2,依數值大小排序 
       end],arr[start]] 
        }else{ 
            return [arr[start] >    // 陣列長度一半 
    var l = 數學。 arr,l 1,end); 
    //回傳結果 
    var result = []; 
    //分割成兩部分左右兩個陣列只比對數組中的第一個數,那個數值小就把誰放到結果裡面,並把小的數值刪除掉,固採用數組中的shift方法。一旦出現左邊數組或右邊數組,沒有資料的時候 
    //result數組就與還有資料的數組合併採用concat,並返回結果 
    while(arrLeft.length>0 || arrRight.length>0 ){ 
        if(arrLeft.length==0){ 
           🎜>        }else if(arrRight.length==0){ 
result = result.concat(arrLeft); 
            break; 
        }            result.push(arrLeft.shift()) 
}else{ 
            result.push(arrRight.shift()); 
       🎜>var arrSort = sort(arr,0,arr.length -1);//參數數組,開始位置,結束位置 

document.write(arr '
' arrSort);


講解:數組排序主要是採用將數組一拆為二,直到不能為之,最後只能是拆掉數組裡面只能是一個或者是兩個,因為數組的長度有奇數偶數之分,拆到最後數組裡面只有一個或兩個之後開始排序並傳回結果,並將這些結果在一一比對進行合併。這個方法可能大家覺得為什麼要這麼複雜,一直採用第一種不行嗎,其實當然可以啦,但是這個世界上還有性能這個詞彙,當數據之後幾個幾十個幾個百,大家的算出的結果時間是沒有什麼差別的,如果當資料龐大的幾億幾十億我們還有這種自信用第一種方法嗎,其實js的演算法就是分而治之,將很多問題分成小的來解決。

二、陣列去掉重複

簡單方法去掉重複:先宣告一個空的數組,將重複的數組for 循環插入,重複的跳過不重複的插入

複製程式碼 程式碼如下:

var arr = []; 
for(var i=0;i    arr.i    arr.push(parseInt. (Math.random()*10)); 

Array.prototype.indexOf = function(n){ 
    for(var i=0;i        if(this[i] == n){ 
            return i; 
   🎜>} 
function removeDup(arr){ 
    var result = []; 
    for(var i=0;i        if(result.indexOf(arr[i]) == -1){    if(result.indexOf(arr[i]) == -1){    if(result.indexOf(arr[i]) == -1){   > result.push(arr[i]); 
        } 
    } 
    return result;  

var arr2 = removeDup(arr) 
document.write(arr '
' arr2)


演算法陣列去掉重複



複製程式碼
Array.prototype.indexOf = function(n){ 
    for(var i=0;i     >            return i; 
        } 
    } 
 🎜>    if(s==e){ 
//分割剩下一個 
        return [arr[s]] 
    }else if(s==e-1){ 
       (arr[s]==arr[e]){ 
            return [arr[s]] 
        
        }
    } 
    //陣列平分成兩段, 
    var l = Math.floor((s e)/2); 
  l); 
    //右邊 
    var arrR = removeDup(arr,l 1,e); 
    //結果先將左邊的複製進去     for(var i=0;i        if(result.indexOf(arrR[i])== -11) result   if(result.indexOf(arrR[i])== -11) result push(arrR[i]) 
    } 
    return result; //回傳結果 

var arrDup = removeDup(arr, 0, arr
var arrDup = removeDup(arr, 0, arr. (arr '
' arrDup);


講解:將重複的數組切割,拆分到最後只剩下一個資料或或兩個數組,將左邊的資料放到結果裡面,右邊重複的跳過不重複插入,直到循環完,回傳結果可以
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
如何在Windows 11/10中按拍攝日期對照片進行排序 如何在Windows 11/10中按拍攝日期對照片進行排序 Feb 19, 2024 pm 08:45 PM

本文將介紹如何在Windows11/10中根據拍攝日期對圖片進行排序,同時探討如果Windows未按日期排序圖片應該如何處理。在Windows系統中,合理整理照片對於方便尋找影像檔案至關重要。使用者可以根據不同的排序方式(如日期、大小和名稱)來管理包含照片的資料夾。此外,還可以根據需要設定升序或降序排列,以便更靈活地組織文件。如何在Windows11/10中按拍攝日期對照片進行排序要按在Windows中拍攝的日期對照片進行排序,請執行以下步驟:打開圖片、桌面或放置照片的任何資料夾在功能區選單中,單

如何在Outlook中按寄件者、主題、日期、類別、大小對電子郵件進行排序 如何在Outlook中按寄件者、主題、日期、類別、大小對電子郵件進行排序 Feb 19, 2024 am 10:48 AM

Outlook提供了許多設定和功能,可協助您更有效地管理工作。其中之一是排序選項,可讓您根據需要對電子郵件進行分類。在這個教學中,我們將學習如何利用Outlook的排序功能,根據寄件者、主題、日期、類別或大小等條件對電子郵件進行整理。這將讓您更輕鬆地處理和查找重要訊息,提高工作效率。 MicrosoftOutlook是一個功能強大的應用程序,可以輕鬆地集中管理您的電子郵件和日曆安排。您可以輕鬆地發送、接收和組織電子郵件,而內建的日曆功能也讓您能夠輕鬆追蹤您即將面臨的活動和約會。如何在Outloo

PHP開發:如何實作表格資料排序與分頁功能 PHP開發:如何實作表格資料排序與分頁功能 Sep 20, 2023 am 11:28 AM

PHP開發:如何實現表格資料排序和分頁功能在進行Web開發中,處理大量資料是一項常見的任務。對於需要展示大量資料的表格,通常需要實現資料排序和分頁功能,以提供良好的使用者體驗和最佳化系統效能。本文將介紹如何使用PHP實作表格資料的排序和分頁功能,並給出具體的程式碼範例。排序功能實作在表格中實作排序功能,可以讓使用者根據不同的欄位進行升序或降序排序。以下是一個實作表格

使用Python實現XML資料的篩選和排序 使用Python實現XML資料的篩選和排序 Aug 07, 2023 pm 04:17 PM

使用Python實現XML資料的篩選和排序引言:XML是一種常用的資料交換格式,它以標籤和屬性的形式儲存資料。在處理XML資料時,我們經常需要對資料進行篩選和排序。 Python提供了許多有用的工具和函式庫來處理XML數據,本文將介紹如何使用Python實現XML資料的篩選和排序。讀取XML檔案在開始之前,我們需要先讀取XML檔案。 Python有許多XML處理函式庫,

C++程式:按字母順序重新排列單字的位置 C++程式:按字母順序重新排列單字的位置 Sep 01, 2023 pm 11:37 PM

在這個問題中,一個字串被當作輸入,我們必須按字典順序對字串中出現的單字進行排序。為此,我們為字串中的每個單字(之間用空格區分)分配一個從1開始的索引,並以排序索引的形式獲得輸出。 String={“Hello”,“World”}“Hello”=1“World”=2由於輸入字串中的單字已按字典順序排列,因此輸出將列印為“12”。讓我們看看一些輸入/結果場景-假設輸入字串中的所有單字都相同,讓我們看看結果-Input:{“hello”,“hello”,“hello”}Result:3獲得的結

PHP 陣列去重時指定移除重複元素的依據 PHP 陣列去重時指定移除重複元素的依據 Apr 28, 2024 pm 10:48 PM

PHP的array_unique()函數用來移除陣列中重複元素,其預設使用嚴格相等(===)。我們可以透過自定比較函數來指定去重依據:建立自定比較函數,指定去重的標準(例如根據元素長度);將自訂比較函數作為第三個參數傳遞給array_unique()函數,即可根據指定的標準移除重複元素。

Java中的Arrays.sort()方法如何依照自訂比較器對陣列進行排序? Java中的Arrays.sort()方法如何依照自訂比較器對陣列進行排序? Nov 18, 2023 am 11:36 AM

Java中的Arrays.sort()方法如何依照自訂比較器對陣列進行排序?在Java中,Arrays.sort()方法是一個非常有用的方法,可以對陣列進行排序。預設情況下,方法會依照升序排序。但是有時候,我們需要依照自己定義的規則來對陣列進行排序。這時,就需要用到自訂比較器(Comparator)。自訂比較器是一個實作了Comparator介面的類,

wps怎麼排序成績高低 wps怎麼排序成績高低 Mar 20, 2024 am 11:28 AM

在我們的工作中,常常會用到wps軟體,wps軟體處理資料的方式方法是非常多的,而且函數功能也是非常強大的,我們常用函數來求平均值,求總和等,可以說只要是統計數據能用的方法,wps軟體庫裡都已經為大家準備好了,下面我們要介紹的是wps怎麼排序成績高低的操作步驟,看完以後大家可以藉鑑經驗。 1.先開啟需要排名的表格。如下圖所示。  2、然後輸入公式=rank(B2,B2:B5,0),一定要輸入0。如下圖所示。  3、輸入完公式以後,按下電腦鍵盤上的F4鍵,這一步驟操作是為了讓相對引用變成絕對引用。

See all articles