如何检查数组中是否所有的数字都交换了

how to check if all the numbers are swapped in an array?

本文关键字:数字 交换 是否 何检查 检查 数组      更新时间:2023-09-26

我一直在尝试用一个函数自己制作sort()方法。

function arrange(arr) {
                var arrangedList = [];
                for (var i = 0; i < arr.length; i++) {
                                if (arr[i] > arr[i + 1]) {
                                                var tmp = arr[i + 1];
                                                arr[i + 1] = arr[i]
                                                arr[i] = tmp;
                                }
                                arrangedList.push(arr[i]);
                }
                return arrangedList;
}

它按我想要的交换位置,但问题是它只交换一次。如果我用[7,1,6,2]来调用这个函数,它会像这样工作:

[1,7,6,2]
[1,6,7,2]
[1,6,2,7]
  • 在这里停止。它不会再检查6是否大于2,然后交换。我怎么解它?

你可以在这里看到我的小提琴

下面是我在评论中提到的链接中的代码。它实现了冒泡排序:

var a = [34, 203, 3, 746, 200, 984, 198, 764, 9];
function bubbleSort(a)
{
    var swapped;
    do {
        swapped = false;
        for (var i=0; i < a.length-1; i++) {
            if (a[i] > a[i+1]) {
                var temp = a[i];
                a[i] = a[i+1];
                a[i+1] = temp;
                swapped = true;
            }
        }
    } while (swapped);
}
bubbleSort(a);
console.log(a);         //[3, 9, 34, 198, 200, 203, 746, 764, 984]

你将不得不使用一个像这样的循环:

function arrange(arr) {
                for (var j = 0; j < arr.length; j++) {
                for (var i = j; i < arr.length; i++) {
                                if (arr[i] > arr[i + 1]) {
                                                var tmp = arr[i + 1];
                                                arr[i + 1] = arr[i]
                                                arr[i] = tmp;
                                }
                }}
                return arr;
}
console.log(arrange([7, 1, 2, 6]));

你所做的被称为bubble sort。这种排序可能需要多次迭代才能完成,因为数组- 1中有多少项。例如,数组[2,3,4,5,1]将需要四次迭代才能完成。

你应该添加第二个for循环来重复迭代。

function arrange(arr) {
    var arrangedList = arr;
    for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr.length; j++) {
            if (arr[j] > arr[j + 1]) {
                var tmp = arrangedList[j + 1];
                arrangedList[j + 1] = arrangedList[j];
                arrangedList[j] = tmp;
            }
        }
    }
    return arrangedList;
}

您可以通过在每次迭代时检查是否至少进行了一次更改,并在迭代没有更改数组时立即返回,从而使该算法更有效。

试试这个

function arrange(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = i; j < arr.length; j++) {
            if (arr[j] > arr[j + 1]) {
                var tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    return arr ;
}