咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          導航

          公告

          呆在上海 

          Java,Flex,Android,SVG等技術的 圖形UI

          Email:leooath@gmail.com

          QQ:35339893


          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          快速排序 (轉)

          Posted on 2009-06-17 12:10 oathleo 閱讀(1306) 評論(0)  編輯  收藏 所屬分類: Web
          在ie6.0中快速排序算法比Array對象的sort方法快多了,對于元素比較少的,快速排序的速度基本上是sort方法的5倍左右,對于30000個元素快速排序是sort方法速度的十幾倍
          在ff2.0中兩種排序算法速度基本上差不多,快速排序算法稍微快一點

          <script>
          function rand(m,n){
          ????? //生成一個m、n之間的整數
          ??????? var i=Math.random();
          ??????? return Math.round((n-m)*i+m);
          ?}
          ?????????? ?
          ?????????? ?
          function getRandomArr(m,n,l){
          ? //m:生成隨即整數的最小值,n:生成隨即整數的最大值,l:生成的數組的長度
          ??? var resultArr=[];
          ??? for(var i=0;i<l;i++){
          ??????? resultArr.push(rand(m,n))
          ??? }
          ??? return resultArr;
          }
          ??? ?
          function partition(a,st,en) ?
          { ?
          ??? var s=st; ?
          ??? var e=en+1; ?
          ??? var temp=a[s]; ?
          ??? while(1) ?
          ??? { ?
          ??????? while(a[++s]<temp); ?
          ??????? while(a[--e]>temp); ?
          ??????? if(s>e)break; ?
          ??????? var tem=a[s]; ?
          ??????? a[s]=a[e]; ?
          ??????? a[e]=tem; ?
          ??? } ?
          ??? a[st]=a[e]; ?
          ??? a[e]=temp; ?
          ??? return e; ?
          } ?

          function doSort(a,s,e) ?
          { ?
          ??? if(s<e) ?
          ??? { ?
          ??????? var pos=partition(a,s,e); ?
          ??????? doSort(a,s,pos-1); ?
          ??????? doSort(a,pos+1,e); ?
          ??? } ?
          } ?
          ??? ?
          Array.prototype.quickSort = function() ?
          { ?
          ????? doSort(this,0,this.length-1); ?
          }


          function sortIntF(a,b){return a-b}
          function pk(num){
          ??? //num: 用于排序的數組的元素個數
          ??? //生成用于排序的數組
          ??? var arr=getRandomArr(1,999999,num);
          ??? ?
          ??? //當元素個數小于10000時,執行n次取平均值 ?
          ??? var n=Math.ceil(10000/num);
          ??? ?
          ??? //生成多個用于排序的數組的拷貝
          ??? var quickSortArrs=[];
          ??? var sortArrs=[];
          ??? for(var i=0;i<n;i++){
          ??????? quickSortArrs.push(arr.slice(0));
          ??????? sortArrs.push(arr.slice(0));
          ??? }
          ??? ?
          ??? var t1=new Date();
          ??? ?
          ??? for(var i=0;i<n;i++){
          ??????? quickSortArrs[i].quickSort();
          ??? }
          ??? ?
          ??? var t2=new Date();
          ??? ?
          ??? for(var i=0;i<n;i++){
          ??????? sortArrs[i].sort(sortIntF);
          ??? }
          ??? ?
          ??? var t3=new Date();
          ??? ?
          ??? alert("性能比較,對于"+num+"個元素的數組,平均每次排序花費時間如下:\n"
          ??? +"Array.prototype.sort:"+((t3-t2)/n)+"ms\n"
          ??? +"quickSort:"+((t2-t1)/n)+"ms\n"
          ??? );
          ??? ?
          ??? alert("排序結果是否正確:"+(sortArrs[0].join()==quickSortArrs[0].join()));
          }

          pk(500);
          pk(2000);
          pk(30000);
          </script>
          主站蜘蛛池模板: 桃源县| 阜平县| 禹城市| 聂荣县| 浙江省| 玉龙| 云霄县| 南丹县| 合阳县| 改则县| 曲松县| 定日县| 绥宁县| 长沙县| 虎林市| 浑源县| 边坝县| 贺州市| 沂水县| 丰原市| 汤阴县| 登封市| 忻州市| 西宁市| 蚌埠市| 太白县| 祁连县| 乡城县| 霸州市| 重庆市| 富锦市| 梁河县| 准格尔旗| 嵩明县| 改则县| 竹北市| 天祝| 宁蒗| 沭阳县| 抚顺县| 庐江县|