Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Node.js上编写shell排序_Javascript_Node.js_Sorting_Shellsort - Fatal编程技术网

Javascript 如何在Node.js上编写shell排序

Javascript 如何在Node.js上编写shell排序,javascript,node.js,sorting,shellsort,Javascript,Node.js,Sorting,Shellsort,我正试图在Node.js上写一个shellsort,就像Wayne第四版的《算法》一书一样。这里有所有用Java编写的示例 这是我的模块: "use strict"; module.exports = (function() { function sort(array) { let size = array.length; let h = 1; while(h < size/3) { h = h * 3 + 1; } while(

我正试图在Node.js上写一个shellsort,就像Wayne第四版的《算法》一书一样。这里有所有用Java编写的示例

这是我的模块:

"use strict";

module.exports = (function() {

  function sort(array) {
    let size = array.length;
    let h = 1;
    while(h < size/3) {
      h = h * 3 + 1;
    }
    while(h >= 1) {
      for(let i = h; i < size; i++) {
        for(let j = i; j >= h && less(array, j, j-h); j = j-h) {
          exch(array, j, j-h);
        }
      }
      h = h/3;
    }
  }

  function less(array, i, min) {
    return array[i] < array[min];
  }

  function exch(array, i, min) {
    let temp = array[i];
    array[i] = array[min];
    array[min] = temp;
  }

  return {
    sort: sort
  };

})();
“严格使用”;
module.exports=(函数(){
函数排序(数组){
让size=array.length;
设h=1;
而(h=1){
for(设i=h;i=h&&less(数组,j,j-h);j=j-h){
exch(阵列,j,j-h);
}
}
h=h/3;
}
}
无函数(数组,i,min){
返回数组[i]<数组[min];
}
函数exch(数组,i,min){
设temp=array[i];
数组[i]=数组[min];
数组[min]=温度;
}
返回{
排序:排序
};
})();
我使用mocha和chai测试此功能:

function isSorted(array) {
  for(let i = 1, size = array.length; i < size; i++) {
    if (array[i] < array[i-1]) {
      return false;
    }
  }
  return true;
}
函数已排序(数组){
for(设i=1,size=array.length;i
shell排序不起作用:

在Javascript中实现shell排序算法
如果使用
h=h/3
,您的
h
可能会变成一个浮点数。尝试
h=数学楼层(h/3)取而代之。

您需要自己的排序功能还是需要一个排序功能来对数字进行排序?我只是不明白为什么我的模块中的
排序
功能不起作用。这和书中的一样。您可以在此处看到原始实现:在module.export上返回函数。但是函数没有返回排序的数组。我没有进一步发现错误,而是尝试了算法。看到我的答案了吗
function shellSort(arr){
    
    var len  = arr.length;
    var gapSize =  Math.floor(len/2);
 
    while(gapSize > 0){
        for(var i = gapSize; i < len; i++) {
 
            var temp = arr[i];
            var j = i;
 
            while(j >= gapSize && arr[j - gapSize] > temp) {
                arr[j] = arr[j - gapSize];
                j -= gapSize;
            }
            arr[j] = temp;
        }
        gapSize = Math.floor(gapSize/2);
    }
    return arr;
}

function isSorted(array) {
  for(let i = 1, size = array.length; i < size; i++) {
    if (array[i] < array[i-1]) {
      return false;
    }
  }
  return true;
}

 
var randomArray = [45,86,3,5,97,95,4,24,7,88,93,27,45,90,54,89,74,5,90,73,74,857,834,8394,4231,485,32,54,674,12];
var mySortedArray = shellSort(randomArray);

console.log(mySortedArray);
console.log(isSorted(mySortedArray));
[3, 4, 5, 5, 7, 12, 24, 27, 32, 45, 45, 54, 54, 73, 74, 74, 86, 88, 89, 90, 90, 93, 95, 97, 485, 674, 834, 857, 4231, 8394]
true