1. 程式人生 > >JS實現快速排序

JS實現快速排序

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>快速排序</title>
    </head>
    <body>
    <script type="text/javascript">
    /*
    "快速排序"的思想很簡單,整個排序過程只需要三步:
  (1)在資料集之中,找一個基準點
  (2)建立兩個陣列,分別儲存左邊和右邊的陣列
  (3)利用遞迴進行下次比較
     */
    function quickSort(arr){
        if(arr.length<=1){//如果陣列只有一個數,就直接返回;
            return arr;
        }
        var num=Math.floor(arr.length/2);//找到中間數的索引值,如果是浮點數,則向下取整
        var newValue=arr.splice(num,1);//找到中間數的值
        var left=[],right=[];
        for(var i=0;i<arr.length;i++){
            if(arr[i]<newValue){
                left.push(arr[i]);//基準點的左邊的數傳到左邊陣列
            }else{
                right.push(arr[i]);//基準點的右邊的數傳到右邊陣列
            }
        }
        return quickSort(left).concat(newValue,quickSort(right));//遞迴不斷重複比較
    }
    console.log(quickSort([21,5,45,12,56,8]));//[5, 8, 12, 21, 45, 56]
    </script>
    </body>
</html>




相關推薦

js實現快速排序的方法

大小 我們 mage 左右 div () quicksort www for 因為面試面到了這個問題,所以寫一下,加深印象,有兩種方法 第一種是通過兩個for循環,每一次對比相鄰兩個數據的大小,小的排在前面,如果前面的數據比後面的大就交換這兩個數的位置,這個方法就是比較次數

使用JS實現快速排序

中間 math 遍歷 ice 大致 spl arr [0 遞歸 大致分三步: 1、找基準(一般是以中間項為基準) 2、遍歷數組,小於基準的放在left,大於基準的放在right 3、遞歸 function quickSort(arr){ /

js實現快速排序,二分查詢 (詳解,一次學會)

js中幾大演算法,最近看到網上各路大神的解答,都蠻好的,自己也來玩一玩 一,快速排序 大致分三步: 在資料集之中,選擇一個元素作為"基準"(pivot)。 所有小於"基準"的元素,都移到"基準"的左邊;所有大於"基準"的元素,都移到"基準"的右邊。 對"基準"左邊和右邊的兩個子集,不斷重複

JS實現快速排序

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8">

JS實現快速排序(QuickSort)

偶然看到阮一峰老師部落格中幾年前的一個快速排序演算法,每次迴圈一次都要建立兩個額外陣列,如果資料量大的話要佔用不少額外記憶體。但是陣列是引用型別,是可修改的,可以直接操作原陣列本身來節約記憶體。 下面自己寫了一個,當做練手。(除去標準的雙向分類外,還稍稍優化了

JS實現快速排序(2種方法)

1、用i和j兩個指標 2、用一個指標判斷,大的放在右邊,小的數放在左邊 <!DOCTYPE html> <html> <head> <title>quickSort</title> <meta cha

js實現氣泡排序快速排序

氣泡排序 1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 3.針對所有

js實現冒泡排序(bubble sort)快速排序(quick sort)歸並排序(merge sort)

mergesort dep lse small sort code n) ble 排序效率 排序問題相信大家都比較熟悉了。用js簡單寫了一下幾種常用的排序實現。其中使用了es6的一些語法,並且不僅限於數字——支持各種類型的數據的排序。那麽直接上代碼: function co

JS實現冒泡排序

turn 實現 fun -i spa con cti for logs 1. 1 var arr = prompt("請輸入一個數組(以“,”隔開):").split(",").map(function(data){ 2 return +data;}); 3

JS實現插入排序法和選擇排序

排序算法 ble inner 基本算法 出了 clas 一點 暫時 while   試著寫了寫,但對輸出方式不太熟,所以註釋部分的沒能成功(我猜測是數據被覆蓋了,所以最後運行結果都是‘6‘),或許不能用innerHTML來進行輸出,暫時不管了,改天再研究研究JavaScri

python-實現快速排序

code urn print lis 退出 快速 turn utf-8 col # encoding=utf-8 def quick_sort(alist, start, end): """快速排序""" if start >= end:

Java實現快速排序

static nlogn -- 可能 超過 highlight uic 數組 images 一、快速排序的思想   基於分治的思想,是冒泡排序的改進型。首先在數組中選擇一個基準點(該基準點的選取可能影響快速排序的效率,後面講解選取的方法),然後分別從數組的兩端掃描數組,設兩

C語言實現快速排序法(分治法)

下一個 enter hang partition 等於 就是 tor log markdown title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true ---

scala實現快速排序

col nbsp pri style 其中 分數 分割 序列 它的 // 快速排序:它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小, // 然後再按此方法對這兩部分數據分別進行快速排序,整個

js實現排序

小頂堆 ldm heapsize 結點 記錄 堆排序原理 維護 繼續 初始 二叉樹:數據結構的一種。二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。一棵深度為k,且有2^k-1個節點稱之為滿二叉樹;深度為k,有n個節點的二叉樹

python實現快速排序

body 一個數 有一個 name title main 大於 16px pos 快速排序在於快,大概思想是:先使用一個數值作為中間值,通過第一次排序將數組分為兩部分,左邊的都比這個數值小, 右邊的都比這個數值大,再利用遞歸將這兩部分數組進行同樣的排序: 1 def q

68.qq號索引結構體寫入內存,並實現快速排序

ets style pau ont 步驟 之前 比較 多個 兩個 1 //兩個步驟,第一步讀取文件,並且初始化索引結構體,把初始化的索引結構體寫入到文件,第二步,讀取這個文件到索引結構體 2 //並對這個結構體進行快速排序,得到順序的索引,再寫入文件 3 #d

算法——python實現快速排序(二分法思想)

append exc microsoft 部分 input temp style 數字 快速排序 實現思路   將所需要的數字存入一個列表中 首先,設置將最左側的那個數設置為基準數,在列表中索引為0 然後設置兩個移動位(用於比較),分別為最左邊和最右邊 然後最右邊那位向左

使用java實現快速排序的一個簡單例子

fast val rgs 快速 實現 個數 static void sta public static void main(String[] args) { // 測試排序 Random r = new Random(); int arr[] = new

使用java實現快速排序(我認為是最簡單最容易理解的版本)

一切都在程式碼和註釋之中。複製貼上就能跑,邊跑邊看才是最愉快的。 所以,話不多說,放碼過來。   public class QuickSort { public static void main(String[] args) { int x[]={6,1,2,7,9,1