Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 选择排序不';我不能正常工作_Javascript_Sorting_Selection Sort - Fatal编程技术网

Javascript 选择排序不';我不能正常工作

Javascript 选择排序不';我不能正常工作,javascript,sorting,selection-sort,Javascript,Sorting,Selection Sort,我正在使用选择排序对数组进行排序,但它无法正常工作。它返回的数组类似于2、3、4、17、6、8、9、11、13。 那么,我是否写错了选择排序算法?在其他情况下可以,但在这里不行 <body> <button onclick="func()">Click</button> </body> <script> var arr = [4, 3, 11, 9, 18, 13, 6, 2]; var counter = 0; fu

我正在使用选择排序对数组进行排序,但它无法正常工作。
它返回的数组类似于2、3、4、17、6、8、9、11、13。
那么,我是否写错了选择排序算法?在其他情况下可以,但在这里不行

   <body>
  <button onclick="func()">Click</button>
</body>

<script>
  var arr = [4, 3, 11, 9, 18, 13, 6, 2];
var counter = 0;

function showarray() {
  for (var i = 0; i < arr.length; i++) {
    var divSort = document.createElement("div");
    divSort.style.width = 30 + "px";
    divSort.style.height = 30 + "px";
    divSort.style.background = "yellow";
    divSort.style.display = "inline-block";
    divSort.style.margin = "10px";
    divSort.id = arr[i];
    divSort.innerHTML = arr[i];
    document.body.appendChild(divSort);
  }
}
showarray();

function func() {
  for (var j = 0; j < arr.length-1; j++) {
    var min=j;
    for (var i = j+1; i < (arr.length); i++) {
      if (arr[min] > arr[i]) {
        min=i;

      }
    }

    swap(min, j);

}
}
  function swap(smaller, bigger) {
    var tmpBigger = arr[bigger];
    var tmpSmaller = arr[smaller];
    arr[bigger] = tmpSmaller
    arr[smaller] = tmpBigger;

    setTimeout(function() {
      $("#" + tmpSmaller).insertBefore("#" + tmpBigger);
    }, ++counter * 2000);
  }

点击
var-arr=[4,3,11,9,18,13,6,2];
var计数器=0;
函数showarray(){
对于(变量i=0;iarr[i]){
min=i;
}
}
交换(最小,j);
}
}
功能交换(更小、更大){
var tmpBigger=arr[更大];
var tmpSmaller=arr[更小];
arr[更大]=tmpSmaller
arr[更小]=tmpBigger;
setTimeout(函数(){
$(“#”+tmpSmaller).insertBefore(“#”+tmpBigger);
},+计数器*2000);
}

只需将它们按数字排序即可:

var arr = [4, 3, 17, 11, 9, 8, 13, 6, 2];
arr.sort(function(a, b) {
  return a - b;
});
alert(arr);

此交换功能将与兄弟节点一起使用:

function swap(ind1, ind2) {
    var valueOne = arr[ind1];
    var valueTwo = arr[ind2];
    arr[ind2] = valueOne;
    arr[ind1] = valueTwo;

    setTimeout(function () {
        elementSwap($('#' + valueOne), $('#' + valueTwo));
    }, ++counter * 2000);
}

function elementSwap(jq1, jq2) {
    var tmp;
    if (jq1.prev().length > 0) {
        tmp = jq1.prev();
        jq1.insertBefore(jq2);
        jq2.insertAfter(tmp);
    } else {
        tmp = jq1.next();
        jq1.insertBefore(jq2);
        jq2.insertBefore(tmp);
    }
}
而且,在这种情况下,更小和更大的区别并不重要

我还建议仅当
min
j
不同时才进行交换:

if (min !== j) swap(min, j);
var-arr=[4,3,17,11,9,8,13,6,2];
var计数器=0;
函数showarray(){
对于(变量i=0;iarr[i]){
min=i;
}
}
如果(min!==j)交换(min,j);
}
}
功能交换(ind1、ind2){
var valueOne=arr[ind1];
var valueTwo=arr[ind2];
arr[ind2]=valueOne;
arr[ind1]=值2;
setTimeout(函数(){
元素交换($('#'+valueOne),$('#'+valueTwo));
},+计数器*2000);
}
功能元素交换(jq1、jq2){
var-tmp;
如果(jq1.prev().length>0){
tmp=jq1.prev();
jq1.insertBefore(jq2);
jq2.插入器(tmp);
}否则{
tmp=jq1.next();
jq1.insertBefore(jq2);
jq2.insertBefore(tmp);
}
}


单击
你的
交换
函数在哪里?你为什么不使用本机数组排序方法?@Alexander这是我的交换函数函数交换(更小,更大){var-tmpBigger=arr[biger];var-tmpSmaller=arr[small];arr[biger]=tmpSmaller-arr[minger]=tmpBigger;}@Rooster我需要选择、插入或冒泡排序。它可以处理冒泡,但不能selection@dummy,数组得到正确排序,但div没有。您只是将较小的值移到较高的值之前,因为您的算法实际上是交换值(移动两个元素)。