国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于JS的快速排序?qū)崿F(xiàn)方法

LeexMuller / 1355人閱讀

摘要:所有關(guān)鍵字比該記錄關(guān)鍵字小的記錄放置在前一部分,所有比它大的記錄放置在后一部分,并把改記錄排在這兩部分的中間稱為該記錄歸位,這個過程稱作一次快速排序。代碼如下大佬的代碼還是比較厲害的,簡單易懂,佩服以上就是相關(guān)的快速排序的實現(xiàn)方法

由于自己不是計算機專業(yè),數(shù)據(jù)結(jié)構(gòu)沒有太多研究,曾經(jīng)面試時有被問過關(guān)于快速排序以及冒泡排序的寫法,冒泡排序比較簡單,當時能回答出來,但是快速排序當時就比較懵逼,不知道是個什么方式實現(xiàn)的,面試回來后也沒太在意,最近在看C語言的數(shù)據(jù)結(jié)構(gòu),拓展下這方面的知識,其中就看到了關(guān)于快排算法的描述

描述如下:在待排序的n個記錄中任取一個記錄(通常取第一個記錄),數(shù)據(jù)序列被此記錄劃分成兩部分。所有關(guān)鍵字比該記錄關(guān)鍵字小的記錄放置在前一部分,所有比它大的記錄放置在后一部分,并把改記錄排在這兩部分的中間(稱為該記錄歸位),這個過程稱作一次快速排序。之后對所有的兩部分分別重復上述過程,直至每部分內(nèi)只有一個記錄或空為止。

光看概念有點暈,書上用的是C的源代碼,改寫下,變成JS代碼:

function quickSort(arr, start, end){
        var i = start
        var j = end
        if (start < end ) {
            
            var temp = arr[start]
            while (i != j ) {
                while(arr[j] > temp && j > i){
                    j--
                }
                var com = arr[j]
                arr[j] = arr[i]
                arr[i] = com
                while(arr[i] < temp && i < j){
                    i++
                }
                var com1 = arr[j]
                arr[j] = arr[i]
                arr[i] = com1
            }
            arr[i] = temp
            quickSort(arr, start, i - 1)
            quickSort(arr, i + 1, end)
        }
    }

解釋下:
假設一個無序數(shù)組:[6,8,7,9,0,1,3,2,4,5]
取第一個元素為參考元素,先從尾端開始即end向左遍歷,元素下標為j, 發(fā)現(xiàn)比參考元素小的值,則與從左向右遍歷的元素arr[i]進行交換,然后就從i開始向右遍歷,找到一個比參考元素大的值,而后與arr[j]進行交換,最終i = j 時完成一次快速排序,然后對左邊部分進行快排,對右邊進行快排。

根據(jù)書上就是這樣的了,自己也嘗試了下,答案是沒有問題的

然后看網(wǎng)上某位大佬的做法,更加簡單易懂,將快排簡單化,就是比參考元素小的放置左邊部分,比參考元素大的放置右邊部分,而后分別對兩部分進行快排。

代碼如下:

function quickSort(arr){
    if (arr.length <= 1) {
        return arr
    }

    var left = [], right=[]
    var pivotIndex = Math.floor(arr.length / 2)
    var pivot = arr.splice(pivotIndex, 1)[0]
    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))
}

大佬的代碼還是比較厲害的,簡單易懂,佩服

以上就是相關(guān)的快速排序的實現(xiàn)方法

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89852.html

相關(guān)文章

  • 算法之旅 | 快速排序

    摘要:今天跟大家分享多種排序算法里使用較廣泛,速度快的排序算法快速排序法平均時間復雜度為。快速排序法的原理快速排序是一種劃分交換排序,它采用分治的策略,通常稱其為分治法。 HTML5學堂-碼匠:前幾期算法之旅跟大家分享了冒泡排序法和選擇排序法,它們都屬于時間復雜度為O(n^2)的慢排序。今天跟大家分享多種排序算法里使用較廣泛,速度快的排序算法—— 快速排序法 [ 平均時間復雜度為O (n l...

    AlanKeene 評論0 收藏0
  • 前端優(yōu)化 - 收藏集 - 掘金

    摘要:雖然有著各種各樣的不同,但是相同的是,他們前端優(yōu)化不完全指南前端掘金篇幅可能有點長,我想先聊一聊閱讀的方式,我希望你閱讀的時候,能夠把我當作你的競爭對手,你的夢想是超越我。 如何提升頁面渲染效率 - 前端 - 掘金Web頁面的性能 我們每天都會瀏覽很多的Web頁面,使用很多基于Web的應用。這些站點看起來既不一樣,用途也都各有不同,有在線視頻,Social Media,新聞,郵件客戶端...

    VincentFF 評論0 收藏0
  • JavasScript重難點知識

    摘要:忍者級別的函數(shù)操作對于什么是匿名函數(shù),這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數(shù)是一個很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎, 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機制,如果...

    forsigner 評論0 收藏0
  • JavaScript專題之解讀 v8 排序源碼

    摘要:插入排序是穩(wěn)定的算法。所以準確的說,當數(shù)組長度大于的時候,采用了快速排序和插入排序的混合排序方法。在對數(shù)組進行了一次快速排序后,然后對兩個子集分別進行了插入排序,最終修改數(shù)組為正確排序后的數(shù)組。 JavaScript 專題系列第二十篇,也是最后一篇,解讀 v8 排序源碼 前言 v8 是 Chrome 的 JavaScript 引擎,其中關(guān)于數(shù)組的排序完全采用了 JavaScript 實...

    princekin 評論0 收藏0

發(fā)表評論

0條評論

LeexMuller

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<