zoukankan      html  css  js  c++  java
  • 归并排序与快速排序比较(JS版)

    具体解释看代码,代码如下

       1:  //主函数
       2:  function main() {
       3:      var quickTimeArray = new Array();
       4:      var mergeTimeArray = new Array();
       5:      for (var i = 1; i <= 20; i++) {
       6:   
       7:          
       8:          var array = getRandomArrayEasy(5000*i    );
       9:          var array2 = array.slice(0);
      10:          
      11:   
      12:          var startTime = new Date().getTime();
      13:          doMergeSort(array);
      14:          
      15:          
      16:          var endTime = new Date().getTime();
      17:          mergeTimeArray.push(endTime - startTime);
      18:   
      19:   
      20:   
      21:          var startTime = new Date().getTime();
      22:          
      23:          doQuickSort(array2);
      24:          
      25:   
      26:          var endTime = new Date().getTime();
      27:          
      28:          quickTimeArray.push(endTime - startTime);
      29:          
      30:      }
      31:      draw(quickTimeArray,mergeTimeArray);
      32:   
      33:   
      34:  }
      35:   
      36:   
      37:   
      38:  //归并排序
      39:  function doMergeSort(array) {
      40:      mergeSort(array, 0, array.length - 1);
      41:  }
      42:   
      43:  function mergeSort(array, low, high) {
      44:      var mid = 0;
      45:      if (low < high) {
      46:          mid = parseInt((low + high) / 2);
      47:          mergeSort(array, low, mid);
      48:          mergeSort(array, mid + 1, high);
      49:          merge(array, low, mid, high);
      50:      }
      51:  }
      52:   
      53:  function merge(array, low, mid, high) {
      54:      var tempArray = new Array();
      55:      var i = low;
      56:      var j = mid + 1;
      57:      while (true) {
      58:          var small = 0;
      59:          if (array[i] < array[j]) {
      60:              small = array[i]
      61:              i++;
      62:          } else {
      63:              small = array[j];
      64:              j++;
      65:          }
      66:          tempArray.push(small);
      67:          if (i > mid) {
      68:              //i结束,只需要复制i到j-1就行了
      69:              for (var k = low; k < j; k++) {
      70:                  array[k] = tempArray.shift();
      71:              }
      72:              break;
      73:          }
      74:          if (j > high) {
      75:              for (var k = i; k <= mid; k++) {
      76:                  tempArray.push(array[k]);
      77:              }
      78:              for (var k = low; k <= high; k++) {
      79:                  array[k] = tempArray.shift();
      80:              }
      81:              break;
      82:          }
      83:   
      84:      }
      85:   
      86:  }
      87:   
      88:  //快速排序
      89:  //return 排序好的数组
      90:  function doQuickSort(array) {
      91:      quickSort(array, 0, array.length - 1);
      92:  }
      93:   
      94:  function quickSort(array, low, high) {
      95:      var w = 0;
      96:      if (low < high) {
      97:          w = split(array, low, high);
      98:          quickSort(array, low, w - 1);
      99:          quickSort(array, w + 1, high);
     100:      }
     101:  }
     102:   
     103:  //快速排序的划分算法
     104:  //return 划分好的数组
     105:  function split(array, low, high) {
     106:      var temp = array[low];
     107:      var temp2 = getSplitingElementIndex(array, low, high);
     108:      array[low] = array[temp2];
     109:      //获得划分元素的位置
     110:      array[temp2] = temp;
     111:      var i = low;
     112:      var x = array[low];
     113:      for (var j = low + 1; j <= high; j++) {
     114:          if (array[j] <= x) {
     115:              i++;
     116:              if (i != j) {
     117:                  var temp3 = array[i];
     118:                  array[i] = array[j];
     119:                  array[j] = temp3;
     120:              }
     121:          }
     122:      }
     123:      var temp4 = array[low];
     124:      array[low] = array[i];
     125:      array[i] = temp4;
     126:      return i;
     127:   
     128:  }
     129:   
     130:  //寻找划分元素
     131:  //return 划分元素在数组中的位置
     132:  //param array 数组
     133:  //param low 下限
     134:  //param high 上限
     135:  function getSplitingElementIndex(array, low, high) {
     136:      var mid = low + parseInt((low + high) / 2);
     137:      if (array[mid] > array[low])//array[mid] 为第二大时返回mid
     138:      {
     139:          if (array[mid] < array[high]) {
     140:              return mid;
     141:          } else {
     142:              if (array[high] < array[low]) {
     143:                  return low;
     144:              } else {
     145:                  return high;
     146:              }
     147:          }
     148:      } else {
     149:          if (array[low] < array[high])//array[low] 为第二大是返回low
     150:          {
     151:              return low;
     152:          } else {
     153:              if (array[high] > array[low]) {
     154:                  return high;
     155:              } else {
     156:                  return low;
     157:              }
     158:          }
     159:      }
     160:  }
     161:   
     162:  //size数组大小
     163:  //floor数据下限 floor>=0;
     164:  //upper数据上限
     165:  //return 数组对象
     166:  function getRandomArray(size, floor, upper) {
     167:      if (floor < 0 || upper < 0)
     168:          return null;
     169:      var temp = upper - floor;
     170:      var array = new Array();
     171:      for (var i = 0; i < size; i++) {
     172:          array[i] = parseInt(Math.random() * temp + floor);
     173:      }
     174:      return array;
     175:   
     176:  }
     177:   
     178:  //封装好的默认范围为0到100000的getRandomArray
     179:  function getRandomArrayEasy(size) {
     180:      return getRandomArray(size, 0, 100000);
     181:  }
     182:   
     183:  //画图
     184:  function draw(QTArray,MTArray) {
     185:      var quickTr = document.getElementById("quickSort");
     186:      var mergeTr = document.getElementById("mergeSort");
     187:      for(var i=0;i<QTArray.length;i++)
     188:      {
     189:          var th  = document.createElement('th');
     190:          th.innerHTML=QTArray[i];
     191:          quickTr.appendChild(th);
     192:          
     193:          var th2  = document.createElement('th');
     194:          th2.innerHTML=MTArray[i];
     195:          mergeTr.appendChild(th2);
     196:      }
     197:   
     198:  }
     199:   
     200:   

    附上调用的页面

       1:  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
       2:  "http://www.w3.org/TR/html4/strict.dtd">
       3:   
       4:  <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
       5:      <head>
       6:          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       7:          <title>index</title>
       8:          <meta name="author" content="Jabba" />
       9:          <!-- Date: 2012-11-15 -->
      10:      </head>
      11:      <body >
      12:          <script type="text/javascript" src="sort.js"></script>
      13:          <div align= "center">
      14:              <input type="button" value="start" onclick="main()"/>
      15:          </div>
      16:          <div align="center">
      17:              <table id="table" rows="3" cols="21" border="1">
      18:                  <tr>
      19:                      <th>排序算法</th>
      20:                      <th colspan="20">排序时间(毫秒)</th>
      21:                  </tr>
      22:                  <tr id="mergeSort">
      23:                      <td>归并排序</td>
      24:                  </tr>
      25:                  <tr id="quickSort">
      26:                      <td>快速排序</td>
      27:                  </tr>
      28:              </table>
      29:          </div>
      30:   
      31:      </body>
      32:   
      33:  </html>
      34:   
  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/Jabba93/p/2919862.html
Copyright © 2011-2022 走看看