在Javascript中使用for循环对数组进行排序

在Javascript中使用for循环对数组进行排序,javascript,Javascript,是否可以使用for循环JavaScript按升序/降序对数组进行排序 我一直在学习JS,在课堂考试前,我在课本上复习了一些练习题 任何提示都将不胜感激 a = Number(prompt("a:")); b = Number(prompt("b:")); c = Number(prompt("c:")); d = Number(prompt("d:")); e = Number(prompt("e:")); // find largest element var test = [a, b, c

是否可以使用for循环JavaScript按升序/降序对数组进行排序

我一直在学习JS,在课堂考试前,我在课本上复习了一些练习题

任何提示都将不胜感激

a = Number(prompt("a:"));
b = Number(prompt("b:"));
c = Number(prompt("c:"));
d = Number(prompt("d:"));
e = Number(prompt("e:"));

// find largest element
var test = [a, b, c, d, e];
var biggest = -Infinity;
var biggest_index = -1; {
    for (i = 0; i < test.length; i++) {
        if (test[i] > biggest) {
            biggest = test[i];
            biggest_index = i;
        }
        else;
    }
    alert("The biggest element is " + biggest + " at index " + biggest_index);
}

// move largest element of array to the last index
test[test.length] = biggest;

// get rid of copy
test[biggest_index] = 0;
alert("Unsorted: " + test);

// shuffle ??
a=Number(提示(“a:”);
b=数字(提示(“b:”);
c=数字(提示(“c:”);
d=数字(提示(“d:”);
e=数字(提示(“e:”);
//查找最大元素
var检验=[a、b、c、d、e];
var最大值=-无穷大;
var指数=1;{
对于(i=0;i最大值){
最大=试验[i];
最大指数=i;
}
其他的
}
警报(“指数+最大指数处的最大元素为“+最大+”);
}
//将数组的最大元素移动到最后一个索引
测试[测试长度]=最大值;
//清除副本
测试[最大指数]=0;
警报(“未排序:+测试);
//洗牌??

如果要获取数组中的最大/最小值,为什么不使用
Math.max/Math.min

如果要对数组进行排序,可以使用
sort
方法:

var sorted = [3, 1, 6, 2].sort(); // sort ascending  
var sorted = [3, 1, 6, 2].sort(function(a, b){
    return b - a;
}); // sort descending 

当然有可能。首先,您应该决定使用哪种算法进行排序。请参见此处,了解一些优秀的视觉示例


但从您的示例来看,您需要另一个for循环。到目前为止,您正在寻找最大的,您需要另一个循环来重复您的逻辑,但找到第二个最大的,而不是第三个,而不是第四个。等等。

javascript具有数组排序功能

你能行

alert("Sorted: "+ test.sort());

如果您只是在寻找一种对数组进行排序的有效方法,最好只使用

使用它可以很简单,如下所示:

var unsortedArray = [12, 55, 35, 11, 88, 13, 6];
var sortedArray = unsortedArray.sort();

如果出于某种原因(例如出于教育目的),您不想使用内置的
sort()
方法,您应该对排序算法进行一些研究

下面是一些最流行的排序算法:

  • 简单排序:
  • 有效排序:
  • 气泡排序和变体:
  • 分布排序

今天,我实际上正在使用for循环手动排序javascript数组。虽然下面的代码假定您正在向it提供数组(例如,不检查类型),但我可以使用
仅针对
循环获得一个解决方案,没有内置排序方法,也没有新的数组创建:

从最大到最小排序
函数sortGreatest(arr){
//手动将数组从最大到最小排序:
//通过阵列向前循环:
for(设i=0;i [ 1000, 12, 10, 9, 3, -11 ]
从最小到最大排序
函数排序(arr){
//手动将数组从最小到最大排序:
//向后循环数组:
对于(设i=arr.length-1;i>=0;i--){
//再次在阵列中循环,向后移动:
对于(设j=i;j>=0;j--){
if(arr[i] [ -11, 3, 9, 10, 12, 1000 ]

这适用于A到B

function smallTobig(numbers) {

let A_B = []
    for(let i = 0; i < numbers.length; i++) {
     for(let j = i; j < numbers.length; j++) {
        if (numbers[i] > numbers[j]) {
            let temp = numbers[i];
            numbers[i] = numbers[j];
            numbers[j] = temp;
        }
    }
    A_B.push(numbers[i])
}
return A_B
}
console.log(smallTobig([5, 2, 1, 4])); 
console.log(smallTobig([999, 5, 0, 1, 4, 998])); 
console.log(smallTobig([15, 32, 11, 14]));
console.log(smallTobig([5, 4, 3, 2, 1, 0]));
console.log(smallTobig([123, 321, 143, 313]));
函数smallTobig(数字){
设A_B=[]
for(设i=0;i数字[j]){
设温度=数字[i];
数字[i]=数字[j];
数字[j]=温度;
}
}
A_B.推送(数字[i])
}
返回A_B
}
log(smallTobig([5,2,1,4]);
log(smallTobig([999,5,0,1,4998]);
log(smallTobig([15,32,11,14]);
log(smallTobig([5,4,3,2,1,0]);
日志(smallTobig([123321143313]);
这是从B到A的过程

function bigTosmall(numbers) {

let B_A = []
    for(let i = 0; i < numbers.length; i++) {
     for(let j = i; j < numbers.length; j++) {
        if (numbers[i] < numbers[j]) {
            let temp = numbers[i];
            numbers[i] = numbers[j];
            numbers[j] = temp;
        }
    }
    B_A.push(numbers[i])
}
return B_A
}
console.log(bigTosmall([5, 2, 1, 4])); 
console.log(bigTosmall([999, 5, 0, 1, 4, 998])); 
console.log(bigTosmall([15, 32, 11, 14]));
console.log(bigTosmall([5, 4, 3, 2, 1, 0]));
console.log(bigTosmall([123, 321, 143, 313]));
函数bigTosmall(数字){
让B_A=[]
for(设i=0;i
值得注意的是,并非所有浏览器都支持传递函数进行排序(它们很旧,但仍然存在)。对数组进行排序将修改原始数组,这可能不是OP想要的。另一种方法是首先复制数组。如果您的标准是“最少代码”,则:
alert(Math.max.apply(null,array))非常短。但它不使用for循环。:-)哦,将最大值设置为
0
不会将其从数组中删除,您需要使用array.prototype.splice()为此,我将让您在ECMA-262中查找它。