摘要:快速排序遞歸分而治之通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,每次返回一個(gè)有序數(shù)組。
arraySort 數(shù)組排序
這里為大家整理了一些簡(jiǎn)單的數(shù)組排序的算法
冒泡排序 --- 比較兩個(gè)相鄰的元素,替換成正確的位置(你選擇的正序還是倒序) 快速排序 --- 基線條件 --- 只剩一個(gè)元素的時(shí)候就是有序的數(shù)組 選擇排序 --- 無序中選擇極值,進(jìn)行排序 插入排序 --- 無序中循環(huán),插入到有序中 冒泡排序重復(fù)地走訪過要排序的元素列,一次比較兩個(gè)相鄰的元素,重復(fù)地進(jìn)行直到?jīng)]有相鄰元素需要交換,也就是說該元素已經(jīng)排序完成。這個(gè)算法的名字由來是因?yàn)樵酱蟮脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會(huì)上浮到頂端一樣,故名“冒泡排序”。
1. 從數(shù)組的第一項(xiàng) **arr[0]** 項(xiàng)開始,與 **arr[1]** 進(jìn)行對(duì)比,大的往后移動(dòng) 2. 對(duì)每一個(gè)相鄰的元素,都進(jìn)行以上操作,直到?jīng)]有相鄰元素進(jìn)行對(duì)比,最后一對(duì)相鄰 **arr[length-2]-arr[length-1]** 3. 兩兩對(duì)比一輪之后,發(fā)現(xiàn)數(shù)組最后一個(gè)元素是最大的 4. 每走一輪,大的元素都到冒泡到了最后面,所以 ***n個(gè)元素,n-1個(gè)循環(huán)(n-1輪)(n-1個(gè)外循環(huán))***(最后第二輪結(jié)束的時(shí)候,最小的元素已經(jīng)在最前面了) 5. 每走一輪,最后的元素已經(jīng)排好序,所以每走一輪,**比較相鄰元素的次數(shù)少了一次 arr.length-1-當(dāng)前外循環(huán) **
function bubbleSort(arr){ var length = arr.length; for(var i = 0;iright){ arr[j]=right; arr[j+1]=left; } } } return arr; }
通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,每次返回一個(gè)有序數(shù)組。
1. 基數(shù)條件(不再進(jìn)行遞歸的操作):數(shù)組長(zhǎng)度等于1 2. 遞歸條件:數(shù)組長(zhǎng)度大于1 3. 選擇一個(gè)基準(zhǔn)值 **base** 4. 大于基準(zhǔn)值的放一邊,小于基準(zhǔn)值的放一邊 **left right** 5. 分開的每邊 再次挑選基準(zhǔn)值,重復(fù)3之后的步驟 6. 最后將返回的數(shù)組合并在一起
function quickSort(arr){ if(arr.length<2){ return arr; } var base = arr.splice(Math.floor(arr.length/2),1); //基準(zhǔn)值 var left = []; var right = []; for(var i=0;i選擇排序 無序中選擇極值進(jìn)行排序 1. 在數(shù)組中選擇出 ** 最小的一項(xiàng) 極值 **(也就是沒有排序的當(dāng)中) 2. 將其插入到數(shù)組的開頭(有序的開頭) 3. 再把選出來的最小一項(xiàng)刪除掉 3. 上面兩部就行成了 (有序的開頭+無序的數(shù)組) 4. 每走一輪,前面的有序+1,后面的無序-1,所以,n個(gè)元素,***n-1輪*** 第n輪已經(jīng)找不到無序的了function selectSort(arr){ var length = arr.length; for(var i = 0;i插入排序 無序中循環(huán),插入到有序中 1.假設(shè)**arr[0]**為有序的第一項(xiàng),arr[0]之后的都為無序 (有序+無序) 2.從arr[0]之后無序進(jìn)行循環(huán),插入到**有序**相應(yīng)的位置中 3.每走一輪,有序+1,無序-1 n.arr[n]和arr[n-1]對(duì)比,滿足 arr[n-1] > arr[n], =>=> 在有序中找到相應(yīng)的位置插入function insertSort(arr){ var length = arr.length; for(var i = 1;i再來對(duì)比一下這四個(gè)排序arr[i]){ //判斷能不能動(dòng),只要前面那一項(xiàng)比他大就能動(dòng) for(var j = i-1;j>=0;j--){ if(arr[j]>insert){ //前面那一項(xiàng)比他大,那么將前面那一項(xiàng)的位置記錄下來, insertIndex = j; } } arr.splice(insertIndex,0,insert); //插入到前面去 arr.splice(i+1,1); //原來位置上的刪除,因?yàn)椴迦肓艘豁?xiàng),要在原來的位置上加1 } } return arr; } 數(shù)組越長(zhǎng),快速排序>插入排序>選擇排序>冒泡排序
ms 數(shù)組長(zhǎng)度 6 10 3000 冒泡排序 0.19 0.56 19.6 快速排序 0.28 0.29 0.27 選擇排序 0.22 0.82 12.6 插入排序 0.34 0.44 11
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96592.html
摘要:選擇排序算法實(shí)現(xiàn)實(shí)現(xiàn)選擇排序,記錄最小元素的索引,最后才交換位置說明交換兩個(gè)數(shù)組中的元素,在中有更簡(jiǎn)單的寫法,這是的語(yǔ)法糖,其它語(yǔ)言中是沒有的。和語(yǔ)言中比較器的實(shí)現(xiàn)前面我們說到了,我們?yōu)榱送怀雠判蛩惴ǖ乃枷耄瑢⑺械睦觾H限在數(shù)組排序中。 showImg(https://segmentfault.com/img/remote/1460000017909538?w=1949&h=1080...
摘要:兩個(gè)單元素?cái)?shù)組的合并實(shí)際就是對(duì)這兩個(gè)數(shù)進(jìn)行了排序,即變?yōu)椋瑯釉賹?duì)后一組的兩個(gè)數(shù)歸并排序,即變?yōu)椋賹蓡卧獢?shù)組歸并成四單元數(shù)組即和歸并為。 前言 本周講解兩個(gè)50多年前發(fā)明,但今天仍然很重要的經(jīng)典算法 (歸并排序和快速排序) 之一 -- 歸并排序,幾乎每個(gè)軟件系統(tǒng)中都可以找到其中一個(gè)或兩個(gè)的實(shí)現(xiàn),并研究這些經(jīng)典方法的新變革。我們的涉及范圍從數(shù)學(xué)模型中解釋為什么這些方法有效到使這些算法...
摘要:棧被稱為一種后入先出的數(shù)據(jù)結(jié)構(gòu)。散列使用的數(shù)據(jù)結(jié)構(gòu)叫做散列表。這些操作需要求助于其他數(shù)據(jù)結(jié)構(gòu),比如下面介紹的二叉查找樹。 前言 在過去的幾年中,得益于Node.js的興起,JavaScript越來越廣泛地用于服務(wù)器端編程。鑒于JavaScript語(yǔ)言已經(jīng)走出了瀏覽器,程序員發(fā)現(xiàn)他們需要更多傳統(tǒng)語(yǔ)言(比如C++和Java)提供的工具。這些工具包括傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)(如鏈表,棧,隊(duì)列,圖等),...
摘要:也稱縮小增量排序,是直接插入排序算法的一種更高效的改進(jìn)版本。希爾排序是非穩(wěn)定排序算法。該方法因於年提出而得名。 前言 因?yàn)楸容^隨心所欲,所以我不按難度分享算法,所以你們會(huì)看到有時(shí)候順序有變化,因?yàn)槲野l(fā)表的時(shí)候會(huì)按照難度修改下位置,盡量讓你們看的時(shí)候能從簡(jiǎn)單開始,以后每次更新都加個(gè)更新時(shí)間好了,讓你們知道我進(jìn)度.新增計(jì)時(shí)函數(shù)直觀對(duì)比效率并且因?yàn)橘Y料比較雜,很多都是我個(gè)人理解說法,如果有發(fā)...
閱讀 1341·2023-04-25 23:42
閱讀 2808·2021-11-19 09:40
閱讀 3520·2021-10-19 11:44
閱讀 3529·2021-10-14 09:42
閱讀 1860·2021-10-13 09:39
閱讀 3821·2021-09-22 15:43
閱讀 665·2019-08-30 15:54
閱讀 1448·2019-08-26 13:32