二分法排序 问题中有一段代码看不明白请教?

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

//二分法排序
    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])
    }是什么意思 能简单讲一下吗??
阅读 2k
1 个回答

这代码格式……
谁教你这么写的……打死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));

就这样。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题