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

时间:2011-10-24 03:09:07

标签: 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, 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 ??

6 个答案:

答案 0 :(得分:2)

如果要获取数组中的最大/最小数字,为什么不使用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 

答案 1 :(得分:1)

当然有可能。首先,您应该决定要对哪种算法进行排序。请参阅此处以获取一些精彩的视觉示例http://www.sorting-algorithms.com/

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

答案 2 :(得分:0)

javascript对数组有一个排序功能。

你可以做到

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

答案 3 :(得分:0)

如果您只是在寻找一种有效的数组排序方式,最好只使用the built-in sort() method

使用它可以很简单:

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

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

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

答案 4 :(得分:0)

我实际上正在使用for循环手动排序javascript数组。虽然下面的代码确实假设你正在为它提供数组(例如,不检查类型),但这是一个我只能使用for循环的解决方案,没有内置的排序方法,也没有新的数组创作:

最大排序

function sortGreatest(arr) {
  // manually sort array from largest to smallest:
  // loop forwards through array:
  for (let i = 0; i < arr.length; i++) {
    // loop through the array, moving forwards:
    // note in loop below we set `j = i` so we move on after finding greatest value:
    for (let j = i; j < arr.length; j++) {
      if (arr[i] < arr[j]) {
        let temp = arr[i]; // store original value for swapping
        arr[i] = arr[j]; // set original value position to greater value
        arr[j] = temp; // set greater value position to original value
      };
    };
  };
  return arr;
};

console.log(sortGreatest([10,9,1000,12,-11,3]));
// => [ 1000, 12, 10, 9, 3, -11 ]

排序最少到最大

function sortLeast(arr) {
  // manually sort array from smallest to largest:
  // loop through array backwards:
  for (let i = arr.length-1; i >= 0; i--) {
    // loop again through the array, moving backwards:
    for (let j = i; j >= 0; j--) {
      if (arr[i] < arr[j]) {
        let temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      };
    };
  };
  return arr;
};
console.log(sortLeast([10,9,1000,12,-11,3]));
// => [ -11, 3, 9, 10, 12, 1000 ]

答案 5 :(得分:0)

这是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]));

此从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]));