摘要:然后再分別對基數左邊和右邊的數組進行相同的操作,直到數組中只有一個元素時,返回該數組。
快速排序算法
今天大概講下使用js實現快速排序算法:
快速排序算法的思想類似于二分法,每次都是在數組中選擇一個基數(可以是任意一個位置的數,不過一般選擇中間的數字或者最左邊的數字),每一輪結束后,比該基數小的數都位于該基數的左邊,比該基數大的數都位于該基數的右邊。然后再分別對基數左邊和右邊的數組進行相同的操作,直到數組中只有一個元素時,返回該數組。不說了,具體上代碼(我取數組最左邊的元素作為基數):
var arr=[5,7,2,9,3,8,4,7,1]; // 每次選擇最左邊的數作為基數 function quickSort(arr){ if (arr.length<2) { return arr; } // 定義左指針 var left=0; // 定義右指針 var right=arr.length-1; //開啟每一輪的排序 while(left=arr[0] && left 問題:為什么如果基數選擇數組最左邊元素,每次移動必須右指針先移動找到比基數小的數?同理選擇右邊,要先移動左指針?
回答:解決問題時可以有時候把問題放到極限情況下,這樣更加便于我們直觀的觀察和分析
我們假設如果基數選擇數組最左邊元素,而我們選擇先移動左指針。如果先移動左指針,則此時左指針與右指針相遇,此時交換arr[0]與arr[right],交換后如第二張圖所示,本來交換后位于紅色7左邊的元素應該都小于等于7,但是此時8位于7的左邊,明顯不符合要求。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/94285.html
摘要:用冒泡排序快速排序選擇排序冒泡排序冒泡排序是比較經典的排序方法,是一種用時間換空間的排序方法。找到并交換的時候,指針位置不變。選擇排序沒趟都會產生最小值,它不是相鄰元素的比較而是在該元素設置一個索引。選擇排序循環找到從開始到最后的最小的數 用js冒泡排序,快速排序,選擇排序 1.冒泡排序 冒泡排序是比較經典的排序方法,是一種用時間換空間的排序方法。我總結了一下它的特點:(1)它的時間復...
摘要:所有關鍵字比該記錄關鍵字小的記錄放置在前一部分,所有比它大的記錄放置在后一部分,并把改記錄排在這兩部分的中間稱為該記錄歸位,這個過程稱作一次快速排序。代碼如下大佬的代碼還是比較厲害的,簡單易懂,佩服以上就是相關的快速排序的實現方法 由于自己不是計算機專業,數據結構沒有太多研究,曾經面試時有被問過關于快速排序以及冒泡排序的寫法,冒泡排序比較簡單,當時能回答出來,但是快速排序當時就比較懵逼...
摘要:快速排序英語,又稱劃分交換排序,簡稱快排,一種排序算法,最早由東尼霍爾提出。 快速排序(英語:Quicksort),又稱劃分交換排序(partition-exchange sort),簡稱快排,一種排序算法,最早由東尼·霍爾提出。在平均狀況下,排序n個項目要O(nLogn)次比較。在最壞狀況下則需要O(n^2)次比較,但這種狀況并不常見。事實上,快速排序O(nLogn)通常明顯比其他算...
摘要:公共函數庫用于取出隨機排列的數字原數組給原數組賦值排序算法插入排序時間復雜度二分法插入排序選擇排序快速排序一堆排序測試用例插入排序時間測試二分法插入排序時間測試選擇排序時間測試快速排序時間測試一堆 公共函數庫(用于取出隨機排列的數字) module.exports={ randomIntegerArray:function(count){ var origina...
摘要:快速排序是一種劃分交換排序。快速排序基于冒泡遞歸分治。他在大數據情況下是最快的排序算法之一,平均事件復雜度很低而且前面的系數很小,在大量隨機輸入的情況下最壞情況出現的概率是極小的。 快速排序是一種劃分交換排序。它采用了一種分治的策略,通常稱其為分治法。 分治法的基本思想是:將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞歸地解這些子問題,然后將這些子問題的解組合為原問題的解。...
閱讀 2786·2021-11-02 14:42
閱讀 3170·2021-10-08 10:04
閱讀 1188·2019-08-30 15:55
閱讀 1032·2019-08-30 15:54
閱讀 2321·2019-08-30 15:43
閱讀 1685·2019-08-29 15:18
閱讀 870·2019-08-29 11:11
閱讀 2369·2019-08-26 13:52