Javascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。

阐明

JavaScript版几种常见排序算法共享(js常用排序算法)  JavaScript 算法 第1张

· 每个浏览器测验得出的数据会不一样。比方我用chrome 测验 一般快速排序都会最快,IE 则依据数组长度有或许希尔最快。

· 不要用太大数据去测验冒泡排序(浏览器溃散了我不论)

个人了解

· 冒泡排序:最简略,也最慢,形似长度小于7***

· 插入排序: 比冒泡快,比快速排序和希尔排序慢,较小数据有优势

· 快速排序:这是一个非常快的排序办法,V8的sort办法就运用快速排序和插入排序的结合

· 希尔排序:在非chrome下数组长度小于1000,希尔排序比快速更快

· 体系办法:在forfox下体系的这个办法非常快

  1. //----------一些排序算法
  2. //js运用sort进行排序
  3. systemSort:function(array){
  4. returnarray.sort(function(a,b){
  5. returna-b;
  6. });
  7. },
  8. //冒泡排序
  9. bubbleSort:function(array){
  10. vari=0,len=array.length,
  11. j,d;
  12. for(;i<len;i++){
  13. for(j=0;j<len;j++){
  14. if(array[i]<array[j]){
  15. d=array[j];
  16. array[j]=array[i];
  17. array[i]=d;
  18. }
  19. }
  20. }
  21. returnarray;
  22. },
  23. //快速排序
  24. quickSort:function(array){
  25. //vararray=[8,4,6,2,7,9,3,5,74,5];
  26. //vararray=
    [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];
  27. vari=0;
  28. varj=array.length-1;
  29. varSort=function(i,j){
  30. //完毕条件
  31. if(i==j){return};
  32. varkey=array[i];
  33. vartempi=i;//记载开端方位
  34. vartempj=j;//记载完毕方位
  35. while(j>i){
  36. //j<<--------------向前查找
  37. if(array[j]>=key){
  38. j--;
  39. }else{
  40. array[i]=array[j]
  41. //i++------------>>向后查找
  42. while(j>++i){
  43. if(array[i]>key){
  44. array[j]=array[i];
  45. break;
  46. }
  47. }
  48. }
  49. }
  50. //假如***个取出的key是最小的数
  51. if(tempi==i){
  52. Sort(++i,tempj);
  53. return;
  54. }
  55. //***一个空位留给key
  56. array[i]=key;
  57. //递归
  58. Sort(tempi,i);
  59. Sort(j,tempj);
  60. }
  61. Sort(i,j);
  62. returnarray;
  63. },
  64. //插入排序
  65. insertSort:function(array){
  66. //http://baike.baidu.com/image/d57e99942da24e5dd21b7080
  67. //http://baike.baidu.com/view/396887.htm
  68. //vararray=
    [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];
  69. vari=1,j,temp,key,
  70. len=array.length;
  71. for(;i<len;i++){
  72. temp=j=i;
  73. key=array[j];
  74. while(--j>-1){
  75. if(array[j]>key){
  76. array[j+1]=array[j];
  77. }else{
  78. break;
  79. }
  80. }
  81. array[j+1]=key;
  82. }
  83. returnarray;
  84. },
  85. //希尔排序
  86. //Jun.array.shellSort(Jun.array.df(10000));
  87. shellSort:function(array){
  88. //http://zh.wikipedia.org/zh/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F
  89. //vararray=[13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10];
  90. vartempArr=[1750,701,301,132,57,23,10,4,1];
  91. //reverse()在维基上看到这个***的步长较小数组
  92. //vartempArr=[1031612713,217378076,45806244,
  93. 9651787,2034035,428481,90358,19001,4025,836,182,34,9,1]
  94. //针对大数组的步长挑选
  95. vari=0;
  96. vartempArrtempArrLength=tempArr.length;
  97. varlen=array.length;
  98. varlen2=parseInt(len/2);
  99. for(;i<tempArrLength;i++){
  100. if(tempArr[i]>len2){
  101. continue;
  102. }
  103. tempSort(tempArr[i]);
  104. }
  105. //排序一个步长
  106. functiontempSort(temp){
  107. //console.log(temp)运用的步长计算
  108. vari=0,j=0,f,tem,key;
  109. vartempLen=len%temp>0?parseInt(len/temp)+1:len/temp;
  110. for(;i<temp;i++){//顺次循环列
  111. for(j=1;/*j<tempLen&&*/temp*j+i<len;j++){
    //顺次循环每列的每行
  112. tem=f=temp*j+i;
  113. key=array[f];
  114. while((tem-=temp)>=0){
  115. //顺次向上查找
  116. if(array[tem]>key){
  117. array[tem+temp]=array[tem];
  118. }else{
  119. break;
  120. }
  121. }
  122. array[tem+temp]=key;
  123. }
  124. }
  125. }
  126. returnarray;
  127. }

原文链接:http://www.cnblogs.com/idche/archive/2011/02/16/1956397.html

【修改引荐】

  1. 10个令人惊讶的HTML5和JavaScript作用
  2. JavaScript目标及承继教程之内置目标
  3. JavaScript内存收回机制深化解读
  4. JavaScript初学者应留意的七个细节
  5. 写了10年Javascript未必全了解的接连赋值运算
转载请说明出处
知优网 » JavaScript版几种常见排序算法共享(js常用排序算法)

发表评论

您需要后才能发表评论