成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

排序算法速度測(cè)試(插入排序、二分法插入、選擇排序、快速排序、堆排序)js實(shí)現(xiàn)

mochixuan / 2913人閱讀

摘要:公共函數(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;jarray[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(larray[largest]) largest=l;
          if(rarray[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: 16309ms

github源碼位置:地址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

相關(guān)文章

  • 基于 Javascript 排序算法

    摘要:適用于數(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ù)組元素也只需要...

    tommego 評(píng)論0 收藏0
  • 八大排序算法的Python實(shí)現(xiàn)

    摘要:是穩(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)定...

    princekin 評(píng)論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)與算法二分查找

    摘要:為檢查長(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ú)序...

    zsirfs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

mochixuan

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<