欢迎访问响应式个人博客!
男生版
女生版
初遇时,她的微笑,她往日的深情、承诺和傻劲,两个人共度的美丽时刻,一一印在回忆里,今天的感情已经比不上从前,但是我爱着恋着往日的她,舍不得离开!
排行
详情
您当前的位置>首页 > 正文
常见算法是js实现汇总
2017-10-24 14:42:03   来源:总结   评论:0 点击:

而原先的最后一个元素放到了序列的最前面

3)的交换可能会破坏堆序列的性质(注意此时的序列是除去已经放在最后面的元素),因此需要对序列进行调整,使之满足于上面堆的性质.

重复上面的过程,直到序列调整完毕为止.

js实现:

<script>

/**

* 堆排序

* @param items 数组

* @return 排序后的数组

*/

   function heapSort(items)

   {

   items = array2heap(items); //将数组转化为堆

   for(var i = items.length - 1; i >= 0; i--)

   {

      items = swap(items, 0, i); //将根和位置i的数据交换(用于将最大值放在最后面)

      items = moveDown(items, 0, i - 1); //数据交换后恢复堆的属性

   }

   return items;

   }

   /**

* 将数组转换为堆

* @param items 数组

* @return 堆

*/

   function array2heap(items)

   {

   for(var i = Math.ceil(items.length / 2) - 1; i >= 0; i--)

   {

      items = moveDown(items, i, items.length - 1); //转换为堆属性

   }

   return items;

   }

   /**

* 转换为堆

* @param items 数组

* @param first 第一个元素

* @param last 最后一个元素

* @return 堆

*/

   function moveDown(items, first, last)

   {

   var largest = 2 * first + 1;

   while(largest <= last)

   {

      if(largest < last && items[largest] < items[largest + 1])

      {

             largest++;

      }

      if(items[first] < items[largest])

      {

             items = swap(items, first, largest); // 交换数据

             first = largest;   //往下移

             largest = 2 * first + 1;

      }

      else

      {

             largest = last + 1; //跳出循环

      }

   }

   return items;

   }

   /**

* 交换数据

* @param items 数组

* @param index1 索引1

* @param index2 索引2

* @return 数据交换后的数组

*/

   function swap(items, index1, index2)

   {

   var tmp = items[index1];

   items[index1] = items[index2];

   items[index2] = tmp;

   return items;

   }

   var a = [345,44,6,454,10,154,3,12,11,4,78,9,0,47,88,9453,4,65,1,5];

   document.write(heapSort(a));

</script>

 

 

 

所谓归并就是将两个或者两个以上的有序表合成一个新的有序表。

递归形式的算法在形式上较为简洁但实用性较差,与快速排序和堆排序相比,归并排序的最大特点是,它是一种稳定的排序方法。

js实现归并:

<script>

function MemeryArray(Arr,n, Brr, m)

{      var i, j, k;

       var Crr=new Array(); 

       i = j = k = 0;

       while (i < n && j < m)

       {

              if (Arr[i] < Brr[j])

                     Crr[k++] = Arr[i++];

              else

                     Crr[k++] = Brr[j++];

       }

       while (i < n)

             Crr[k++] = Arr[i++];

       while (j < m)

             Crr[k++] = Brr[j++];

return Crr;

}

var

相关热词搜索:算法 常见

上一篇:JS地址栏动态传参查询的方法
下一篇:JavaScript里的循环方法

收藏