javascript - 二分法排序 问题中有一段代码看不明白请教?
ringa_lee
ringa_lee 2017-04-11 11:37:31
[JavaScript讨论组]

最好给个网址什么的。。。

//二分法排序
    var arr = [15,27,36,53,69,18];

    function sort2(arr) {
        var len = arr.length,i, j, tmp, low, high, mid, result;
      // 赋予数组副本
        result = arr.slice(0);
        
        for(i = 1; i < len; i++){
            tmp = result[i];
            console.log(tmp)
            low = 0;
            high = i - 1;        
            while(low <= high){
            mid = parseInt((low + high)/2, 10);

            if(tmp < result[mid]) high = mid - 1;//前半段查找
            else low = mid + 1;//后半段查找
         }
         
        for(j = i - 1; j >= high+1; j--){
            console.log(j)
          result[j+1] = result[j];  
          console.log(result[j+1])
        }
        result[j+1] = tmp;
        console.log(tmp)
      }
      return result;
    }
    console.log(sort2(arr));
  </script>

其中:for(j = i - 1; j >= high+1; j--){

        console.log(j)
      result[j+1] = result[j];  
      console.log(result[j+1])
    }是什么意思 能简单讲一下吗??
ringa_lee
ringa_lee

ringa_lee

全部回复(1)
ringa_lee

这代码格式……
谁教你这么写的……打死ta……

我百度了下啥叫二分排序
百度百科里的内容如下:
“二分法插入排序是在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。”

把你贴出来的代码格式排整齐点,用上面这段话做注释

//二分法排序
var arr = [15,27,36,53,69,18];

function sort2(arr) {
    var len = arr.length,i, j, tmp, low, high, mid, result;
    result = arr.slice(0);

    for(i = 1; i < len; i++){ 

        tmp = result[i];  //‘插入第i个元素时’  //这里的tmp是准备插入的元素
        low = 0;  
        high = i - 1;  //'前面的0~i-1元素'

        while(low <= high){  //'直到left>right'

            mid = parseInt((low + high)/2, 10);  //'折半'  '对前面的0~i-1元素进行折半'

            if(tmp < result[mid]) {  //'先跟他们中间的那个元素比'
                high = mid - 1; //'如果小,则对前半再进行折半'
            }else{
                low = mid + 1;  //'否则对后半进行折半'
            }
        } //上面那个'直到left>right'移到这里可能更容易理解
     
        for(j = i - 1; j >= high+1; j--){   //'然后再把第i个元素前1位与目标位置之间的所有元素后移'
            result[j+1] = result[j];  //'后移'
        }

        result[j+1] = tmp;  //'再把第i个元素放在目标位置上'
    }
    
    return result;
}

console.log(sort2(arr));

就这样。

不是代码本身的问题,而是其中算法的逻辑,
你可以先不看代码,把这个算法的思路(就是百科里那段话)想清楚

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号