Partition算法及Partition算法用于快速排序

系统 2032 0

JavaScript简单方便,所以用JavaScript实现,可以在Chrome控制台下观察运行结果。主要实现Partition算法,比如输入为 
  var array = [4, 2, 1, 3, 6, 8, 9, 7, 5]; 
  partition(array, 0, 8); 
那么按照array[0]即4进行划分,结果为 [3, 2, 1, 4, 6, 8, 9, 7, 5] .
1. [代码][JavaScript]代码     

// 先来看Partition算法,Partition算法是快速排序的基础
<script type="text/javascript">
    // 划分算法
   function partition(array, p, r) {
      if(p < 0 || r < 0 || p >= r || r > array.length-1)
        return;
       
      var i = p;
      var pivot = array[i];
      for(var j = p+1; j <= r; j++) {
         if(array[j] < pivot) {
            i++;
            var temp = array[j];
            array[j] = array[i];
            array[i] = temp;
         }
      }
       
      // 交换array[i]和array[p]
      var temp = array[p];
      array[p] = array[i];
      array[i] = temp;
       
      return i;
  }
   
  var array = [4, 2, 1, 3, 6, 8, 9, 7, 5];
  partition(array, 0, 8);
  console.log(array);
</script>
2. [代码][JavaScript]代码    
// 基于上面的Partition算法,获得下面的快速排序算法
<script type="text/javascript">
    // 划分算法
   function partition(array, p, r) {
      if(p < 0 || r < 0 ||  p >= r || r > array.length-1)
        return; http://www.huiyi8.com/clxgt/
       
      var i = p; 窗帘效果图
      var pivot = array[i];
      for(var j = p+1; j <= r; j++) {
         if(array[j] < pivot) {
            i++;
            var temp = array[j];
            array[j] = array[i];
            array[i] = temp;
         }
      }
       
      // 交换array[i]和array[p]
      var temp = array[p];
      array[p] = array[i];
      array[i] = temp;
       
      return i;
  }
   
  function quickSort(array, p, q) {
     if(p > q || p < 0 || q < 0 || q > array.length-1)
        return;
      
     if(p==q)   // 递归终止条件
        return;
      
     var mid = partition(array, p, q);
     quickSort(array, p, mid-1);
     quickSort(array, mid+1, q); 
  }
   
  var array = [4, 2, 1, 3, 6, 8, 9, 7, 5];
  quickSort(array, 0, 8);
   
  console.dir(array);
</script>

Partition算法及Partition算法用于快速排序


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论