排序算法JS实现

来源:互联网 发布:腾讯云和阿里云的比较 编辑:程序博客网 时间:2024/05/21 19:28

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>QuickSort.html</title>
 
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
   
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
 <script type="text/javascript">

  var count = 0;
  //快速排序
  function quickSort(data,low,high){
   var key = data[low];
   var i = low;
   var j = high;
   if(low < high){
    while(i<j){
     while(i<j&&data[j]>key){
      j--;
      count++;
     }
     if(i<j){
      count++;
      data[i] = data[j];
      i++;
     }
     while(i<j&&data[i]<key){
      count++;
      i++;
     }
     if(i<j){
      count++;
      data[j]=data[i];
      j--;
     }
    }
    data[i] = key;
    quickSort(data,low,i-1);
    quickSort(data,i+1,high);
   }
  }
  //冒泡排序
  function maopao(data){
   for(var i = 0;i<data.length-1;i++){
    for(var j = 0;j<data.length-1-i;j++){
     if(data[j]>data[j+1]){
      count++;
      var temp;
      temp = data[j];
      data[j] = data[j+1];
      data[j+1] = temp;
     }
    }
   }
  }

  function quickSortByAlexi_X(arr,l,r){
   if(l<r){
    var mid=arr[parseInt((l+r)/2)],
    i=l-1,
    j=r+1;
    while(true){
     while(arr[++i]<mid){count++};
     while(arr[--j]>mid){count++};
     if(i>=j){count++;break};
     var temp=arr[i];
     arr[i]=arr[j];
     arr[j]=temp;
    }
    quickSort(arr,l,i-1);
    quickSort(arr,j+1,r);
   }
   return arr;
  }
  //直接插入排序
  function insertSort(data){
   for(var i = 1;i<data.length;i++){
    var index = i;
    var current = data[i];
    while(index>0&&data[index-1]>current){
     count++;
     data[index] = data[index-1];
     index--;
    }
    data[index] = current;
   }
  }
  function runSortFunction(){
   var data = [];
   for(var i = 0;i<100;i++){
    data.push(parseInt(Math.random()*100));
   }
   alert(data);
   count = 0;
   var sortType = document.getElementById('sortType');
   switch(sortType.options[sortType.selectedIndex].value){
    case 'quick':
     quickSort(data,0,data.length-1);
     break;
    case 'maopao':
     maopao(data);
     break;
    case 'quick_Alexi_X':
     quickSortByAlexi_X(data,0,data.length-1);
     break;
    case 'insert':
     insertSort(data);
     break;
    default:
     break;
   }
   alert(data);
   alert("比较次数:"+count);
  }
 </script>
  </head>
 
  <body>
  排序:
   <select id='sortType'>
  <option value='quick' defaultSelected='true'>快速排序</option>
  <option value='quick_Alexi_X'>快速排序标准版</option>
  <option value='maopao'>冒泡排序</option>
  <option value='insert'>直接插入排序</option>
   </select>
   <input type='button' onclick='runSortFunction()' value='排序'/>
  </body>
</html>