如何检查数组中是否所有的数字都交换了
how to check if all the numbers are swapped in an array?
我一直在尝试用一个函数自己制作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 ;
}
相关文章:
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 测试索引值是否等于某个数字的倍数
- 将数字转换为一定数量的硬币
- 键入最后一位数字后自动提交
- 如何在javascript中迭代数字列表
- Javascript逻辑运算符和字符串/数字
- 如何在javascript中获得与特定数字相等的随机数
- 如果元素's的ID以数字开头
- 递增一个数字而不去掉前导零
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 如何在这里将两个值最低的数字相加
- 如何删除除冒号、数字和'上午'或者'下午'
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- Javascript排序字符串或数字
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 如何使用offer/answer交换来自两个对等连接的流
- 在表单OnChange中交换数字顺序
- 可以'当我交换表行时,我无法在JQuery函数中获得要交换的数字
- 在没有数组的4位数字中交换数字的位置
- 如何检查数组中是否所有的数字都交换了