摘要:公共函數(shù)庫(kù)用于取出隨機(jī)排列的數(shù)字原數(shù)組給原數(shù)組賦值排序算法插入排序時(shí)間復(fù)雜度二分法插入排序選擇排序快速排序一堆排序測(cè)試用例插入排序時(shí)間測(cè)試二分法插入排序時(shí)間測(cè)試選擇排序時(shí)間測(cè)試快速排序時(shí)間測(cè)試一堆
公共函數(shù)庫(kù)(用于取出隨機(jī)排列的數(shù)字)
module.exports={ randomIntegerArray:function(count){ var originalArray=new Array;//原數(shù)組 //給原數(shù)組originalArray賦值 for (var i=0;i排序算法
//插入排序 時(shí)間復(fù)雜度O(n^2) function insertionSort(array){ if(Object.prototype.toString.call(array).slice(8,-1)!="Array") { throw new Error("array is not a Array") return; }; for (var i = 0,l=array.length; i < l; i++) { var insert=array[i]; var j=i-1; while (j>=0&&array[j]>insert) { array[j+1]=array[j]; j--; } array[j+1]=insert; } return array; } //二分法插入排序 function dichotomyInsertSort(array){ if(Object.prototype.toString.call(array).slice(8,-1)!="Array"){ throw new Error("array is not a Array") return; } for (var i = 0; i < array.length; i++) { var key=array[i],left=0,right=i-1; while(left<=right){ var mid=parseInt((left+right)/2); if(key=left; j--) { array[j+1]=array[j]; } array[left]=key; } return array; } //選擇排序 function selectionSort(array){ if(Object.prototype.toString.call(array).slice(8,-1)!="Array"){ throw new Error("array is not a Array") return; } for (var i = 0; i < array.length-1; i++) { var min=array[i]; for(var j=i+1;j array[j]){ var temp=array[j]; array[j]=min; min=temp; } } array[i]=min; } return array; } //快速排序 一 function quickSort(array,left,right){ if(Object.prototype.toString.call(array).slice(8,-1)!="Array"){ throw new Error("array is not a Array") return; } if(left>=right) return; var j=left-1,key=array[right],temp; for (var i = left; i <=right; i++) { if(array[i]<=key&&i!=j){ j++; temp=array[j]; array[j]=array[i]; array[i]=temp; } } quickSort(array,left,j-1); quickSort(array,j+1,right); } //堆排序 /** 0 1 2 3 4 5 6 7 8 9 10 */ var heapSort =(function(){ function heapAjust(array,len){ var mid=Math.floor(len/2); for (var i = mid; i >=0; i--) { var l=2*i+1,r=2*i+2,largest=i; if(l array[largest]) largest=l; if(r array[largest]) largest=r; if(largest!=i){ swap(array,i,largest) } } } function swap(array,i,j){ var temp=array[i]; array[i]=array[j]; array[j]=temp; } return function heap(array){ if(Object.prototype.toString.call(array).slice(8,-1)!="Array"){ console.error("array is not a Array"); return; } var len=array.length; for (var i = 0; i < len; i++) { heapAjust(array,len-i); swap(array,0,len-1-i); } } })() module.exports={ insertionSort:insertionSort, dichotomyInsertSort:dichotomyInsertSort, selectionSort:selectionSort, quickSort:quickSort, heapSort:heapSort } 測(cè)試用例
var common=require("./common.js"); var sort=require("./sort.js") var l=100000; var a=common.randomIntegerArray(l),b; var a1=common.randomIntegerArray(l),b1; var a2=common.randomIntegerArray(l),b2; var a3=common.randomIntegerArray(l),b3; var a4=common.randomIntegerArray(l),b4; /************** *插入排序時(shí)間測(cè)試 ***************/ console.time("insert"); // console.log(a); b=sort.insertionSort(a); // console.log(b); console.timeEnd("insert"); /************** *二分法插入排序時(shí)間測(cè)試 ***************/ console.time("twoinsert"); // console.log(a1); b1=sort.dichotomyInsertSort(a); // console.log(b1); console.timeEnd("twoinsert"); /************** *選擇排序時(shí)間測(cè)試 ***************/ console.time("selectionSort"); // console.log(a2); b2=sort.selectionSort(a2); // console.log(b2); console.timeEnd("selectionSort"); /************** *快速排序時(shí)間測(cè)試一 ***************/ console.time("quickSort1"); // console.log(a3); sort.quickSort(a3,0,a3.length-1); // console.log(a3); console.timeEnd("quickSort1"); /************** *堆排序時(shí)間測(cè)試一 ***************/ console.time("heapSort"); // console.log(a4); debugger; sort.heapSort(a4); // console.log(a4); console.timeEnd("heapSort");實(shí)驗(yàn)結(jié)構(gòu)
100000個(gè)隨機(jī)數(shù)字的時(shí)候
insert: 7943ms
twoinsert: 96807ms
selectionSort: 21013ms
quickSort1: 56ms
heapSort: 16309msgithub源碼位置:地址https://github.com/ddcouples/...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82691.html
摘要:適用于數(shù)據(jù)比較少或基本有序的情況。插入排序時(shí)間復(fù)雜度為,空間復(fù)雜度為,屬于穩(wěn)定排序。算法適用于少量數(shù)據(jù)的排序。就像下圖這樣,可以理解桶的意思下圖是整個(gè)排序過(guò)程示意圖基數(shù)排序時(shí)間復(fù)雜度為,空間復(fù)雜度為,屬于穩(wěn)定排序。 寫(xiě)在前面 個(gè)人感覺(jué):javascript對(duì)類似排序查找這樣的功能已經(jīng)有了很好的封裝,以致于當(dāng)我們想對(duì)數(shù)組排序的時(shí)候只需要調(diào)用arr.sort()方法,而查找數(shù)組元素也只需要...
摘要:是穩(wěn)定的排序方法。也稱縮小增量排序,是直接插入排序算法的一種更高效的改進(jìn)版本。希爾排序是非穩(wěn)定排序算法。算法實(shí)現(xiàn)選擇排序堆排序描述堆排序是指利用堆積樹(shù)堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法,它是選擇排序的一種。 1、插入排序 描述 插入排序的基本操作就是將一個(gè)數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個(gè)新的、個(gè)數(shù)加一的有序數(shù)據(jù),算法適用于少量數(shù)據(jù)的排序,時(shí)間復(fù)雜度為O(n^2)。是穩(wěn)定...
摘要:為檢查長(zhǎng)度為的列表,二分查找需要執(zhí)行次操作。最后需要指出的一點(diǎn)是高水平的讀者可研究一下二叉樹(shù)關(guān)于二叉樹(shù),戳這里數(shù)據(jù)結(jié)構(gòu)與算法二叉樹(shù)算法常見(jiàn)練習(xí)在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見(jiàn)數(shù)據(jù)結(jié)構(gòu) 簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)(必須理解和掌握) 有序數(shù)據(jù)結(jié)構(gòu):棧、隊(duì)列、鏈表。有序數(shù)據(jù)結(jié)構(gòu)省空間(儲(chǔ)存空間?。?無(wú)序數(shù)據(jù)結(jié)構(gòu):集合、字典、散列表,無(wú)序...
閱讀 1548·2023-04-26 02:50
閱讀 3553·2023-04-26 00:28
閱讀 1940·2023-04-25 15:18
閱讀 3225·2021-11-24 10:31
閱讀 999·2019-08-30 13:00
閱讀 1007·2019-08-29 15:19
閱讀 1777·2019-08-29 13:09
閱讀 2984·2019-08-29 13:06