摘要:公共函數庫用于取出隨機排列的數字原數組給原數組賦值排序算法插入排序時間復雜度二分法插入排序選擇排序快速排序一堆排序測試用例插入排序時間測試二分法插入排序時間測試選擇排序時間測試快速排序時間測試一堆
公共函數庫(用于取出隨機排列的數字)
module.exports={ randomIntegerArray:function(count){ var originalArray=new Array;//原數組 //給原數組originalArray賦值 for (var i=0;i排序算法
//插入排序 時間復雜度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 } 測試用例
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; /************** *插入排序時間測試 ***************/ console.time("insert"); // console.log(a); b=sort.insertionSort(a); // console.log(b); console.timeEnd("insert"); /************** *二分法插入排序時間測試 ***************/ console.time("twoinsert"); // console.log(a1); b1=sort.dichotomyInsertSort(a); // console.log(b1); console.timeEnd("twoinsert"); /************** *選擇排序時間測試 ***************/ console.time("selectionSort"); // console.log(a2); b2=sort.selectionSort(a2); // console.log(b2); console.timeEnd("selectionSort"); /************** *快速排序時間測試一 ***************/ console.time("quickSort1"); // console.log(a3); sort.quickSort(a3,0,a3.length-1); // console.log(a3); console.timeEnd("quickSort1"); /************** *堆排序時間測試一 ***************/ console.time("heapSort"); // console.log(a4); debugger; sort.heapSort(a4); // console.log(a4); console.timeEnd("heapSort");實驗結構
100000個隨機數字的時候
insert: 7943ms
twoinsert: 96807ms
selectionSort: 21013ms
quickSort1: 56ms
heapSort: 16309msgithub源碼位置:地址https://github.com/ddcouples/...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82691.html
摘要:適用于數據比較少或基本有序的情況。插入排序時間復雜度為,空間復雜度為,屬于穩定排序。算法適用于少量數據的排序。就像下圖這樣,可以理解桶的意思下圖是整個排序過程示意圖基數排序時間復雜度為,空間復雜度為,屬于穩定排序。 寫在前面 個人感覺:javascript對類似排序查找這樣的功能已經有了很好的封裝,以致于當我們想對數組排序的時候只需要調用arr.sort()方法,而查找數組元素也只需要...
摘要:是穩定的排序方法。也稱縮小增量排序,是直接插入排序算法的一種更高效的改進版本。希爾排序是非穩定排序算法。算法實現選擇排序堆排序描述堆排序是指利用堆積樹堆這種數據結構所設計的一種排序算法,它是選擇排序的一種。 1、插入排序 描述 插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據,算法適用于少量數據的排序,時間復雜度為O(n^2)。是穩定...
摘要:為檢查長度為的列表,二分查找需要執行次操作。最后需要指出的一點是高水平的讀者可研究一下二叉樹關于二叉樹,戳這里數據結構與算法二叉樹算法常見練習在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 常見數據結構 簡單數據結構(必須理解和掌握) 有序數據結構:棧、隊列、鏈表。有序數據結構省空間(儲存空間小) 無序數據結構:集合、字典、散列表,無序...
閱讀 1540·2023-04-26 02:50
閱讀 3547·2023-04-26 00:28
閱讀 1937·2023-04-25 15:18
閱讀 3217·2021-11-24 10:31
閱讀 988·2019-08-30 13:00
閱讀 1004·2019-08-29 15:19
閱讀 1773·2019-08-29 13:09
閱讀 2983·2019-08-29 13:06