常用排序方法总结

直接插入排序

<script>
     var arr=[33,12,3,2,1,0,67];  //待排序的数组
     function sortArr(curArr){
         //为了便于排序,将待排序的数组copy一份,第0个位置用来放岗哨元素,为了辅助排序
         var newArr=[];//为了实现插入排序的辅助数组
         var resultArr=[];//存排好序的元素
         for(var i=0;i<curArr.length;i++){
             newArr[i+1]=curArr[i];
         }
         //下面为直接插入排序的算法开始
         for(var i=2;i<newArr.length;i++){
              if(newArr[i]<newArr[i-1]){//为了优化算法,避免当关键字curArr[i]已是当前最大的记录关键字时还要进行不必要的操作
                  //当第i个元素小于第i-1个元素时,意味着要进行插入排序
                  newArr[0]=newArr[i];//因为后面要进行移位,所以先保存第i个元素(即:监视哨备份待查记录)
                  for(var j=i-1;newArr[0]<newArr[j];j--){
                       newArr[j+1]=newArr[j];
                       newArr[j]=newArr[0];
                  }
              }
         }
     //直接插入排序算法结束
//因为newArr的第0个元素为辅助排序的,为了输出美观,又对newArr数组进行了一次复制 for(var i=1;i<newArr.length;i++){ resultArr[i-1]=newArr[i]; } return resultArr; } var reArr=sortArr(arr); console.log('原来的数组'+arr.join(',')); console.log('排序后的数组'+reArr.join(','));
</script>

折半插入排序

<script>
     var arr=[33,12,3,2,1,0,67,98,12];  //待排序的数组
     function sortArr(curArr){
        //为了便于排序,将待排序的数组copy一份,第0个位置用来放岗哨元素,为了辅助排序
        var newArr=[];//为了实现插入排序的辅助数组
        var resultArr=[];//存排好序的元素
        var low;//查找区间的下界
        var high;//查找区间的上界
        var mid;//查找区间的中间位置
        for(var i=0;i<curArr.length;i++){
             newArr[i+1]=curArr[i];
        }
        //下面为折半插入的算法开始
        for(var i=2;i<newArr.length;i++){
              if(newArr[i]<newArr[i-1]){
                   //需要进行移位
                   newArr[0]=newArr[i];//监视哨备份待查记录
                   low=1;
                   high=i-1;
                   //下面为折半查找第i个元素的插入位置
                   while(low<=high){
                        mid=Math.floor((high+low)/2);//确定待查找范围的中间位置
                        if(newArr[0]<newArr[mid]){
                            //当待查找元素在表的前半部分时
                             high=mid-1;
                        }else{
                             //当待查找元素在表的后半部分时
                             low=mid+1;
                        }
                    }
                    //将第i个元素放在已经查找到的那个位置上
                    for(var j=i-1;j>=low;j--){
                         newArr[j+1]=newArr[j];//记录后移
                    }
                    newArr[low]=newArr[0];   //插入到正确的位置
                }
          }
          //折半插入算法结束      
          //因为newArr的第0个元素为辅助排序的,为了输出美观,又对newArr数组进行了一次复制
          for(var i=1;i<newArr.length;i++){
                resultArr[i-1]=newArr[i];
          }
          return resultArr;
       }
       var reArr=sortArr(arr);
       console.log('原来的数组'+arr.join(','));
       console.log('排序后的数组'+reArr.join(','));
</script>

冒泡排序

<script>
      var arr=[33,12,3,2,1,0,67,98,6];  //待排序的数组
      console.log('原来的数组'+arr.join(','));
      function sortArr(curArr){
           //下面为冒泡排序的算法开始
           var flag=true;//用来标志是否要进行交换操作
           for(var i=0;i<curArr.length-1&&flag;i++){
                 flag=false;
                 for(var j=0;j<curArr.length-i;j++){
                      if(curArr[j]>curArr[j+1]){
                           //为逆序,则需要交换
                           var t=curArr[j+1];
                           curArr[j+1]=curArr[j];
                           curArr[j]=t;
                           flag=true;
                       }
                 }
           }
       //冒泡排序算法结束
return curArr; } var reArr=sortArr(arr); console.log('排序后的数组'+reArr.join(',')); </script>

简单选择排序

<script>
     var arr=[33,12,3,5,2,0,67,98,6];  //待排序的数组
     console.log('原来的数组'+arr.join(','));
     function sortArr(curArr){
         //下面为简单选择排序的算法开始
         for(var i=0;i<curArr.length-1;i++){
              var k=i;//假设当前项为最小的,记录其下标
              for(var j=i+1;j<curArr.length;j++){
                   if(curArr[k]>curArr[j]){
                        //当逆序时需要交换
                        k=j;//更新最小项的下标
                   }
              }
              if(k!=i){
                  //意味着需要进行交换
                  var t=curArr[i];
                  curArr[i]=curArr[k];
                  curArr[k]=t;
              }
           }
      //简单选择排序算法结束
return curArr; } var reArr=sortArr(arr); console.log('排序后的数组'+reArr.join(',')); </script>
原文地址:https://www.cnblogs.com/mujinxinian/p/5708450.html