二分排序法

<pre>

<script type="text/javascript">

//二分排序法从小到大排序

/*算法原理:

    把一组数中的N个数分为三个部分:

    第1部分、中间选一个

    第2部分、小于中间的一个放左边

    第3部分、大于中间的一个放到右边

    重复以上步骤,直到排好为止。重复次数是不确定的根据元素多少和元素顺序都有关系

        

假设有数组: [7,6,9,5,3];

第一次:

    取出中间一项9,如果是偶数项比如4个可以取第二个或第三个都行的。

    把小于9的放到左边数组中,大于9的放到右边数组中,变成了以下样子。

    [6,7,5,3] 9 [];

     

第二次

    因为9后面为空所以9及其后面的就都确定了。问题规模变小了变成了是对

    [6,7,5,3] 进行排序

    取出中间项:7 把小于7的放左边大于7的放右边

    [6,5,3] 7 []

        

第三次

     重复以上思路取出 [6,5,3] 中的中间项 5把小于放左边大于的放右边。

     [3] 5 [6]

    排序完毕(对于小于等于1项的无需进行排序。)

     

最后递归倒着返回结果

    [3] 5 [6] 7 9     

*/

     

//二分排序法代码实现:

var arr = [7,6,9,5,3];

function quickSort(arrT)

{

  if (arrT.length <= 1) { return arrT; }

     

  var pivotIndex = Math.floor(arrT.length / 2);

     

  var pivot = arrT.splice(pivotIndex, 1)[0];

     

  var left = [];

     

  var right = [];

     

  for (var i = 0; i < arrT.length; i++)

    {

     

    if (arrT[i] < pivot)

         {

      left.push(arrT[i]);

     } else {

      right.push(arrT[i]);

    }

  }

  return quickSort(left).concat([pivot], quickSort(right));

};

document.writeln (quickSort(arr));

     

     

</script>

posted @ 2017-09-05 08:50  lison-note  阅读(2506)  评论(0编辑  收藏  举报