JavaScript学习笔记—冒泡和选择排序(性能差)

数组内各元素按升或降序排序
[9,1,3,2,8,0,5,7,6,4]

思路1(冒泡排序):

  • 比较相邻两个元素,然后根据大小来决定是否交换它们的位置
  • 例子:
    第1次排序:1, 3, 2, 8, 0, 5, 7, 6, 4, 9
    第2次排序:1, 2, 3, 0, 5, 7, 6, 4, 8, 9
    第3次排序:1, 2, 0, 3, 5, 6, 4, 7, 8, 9
    第4次排序:1, 0, 2, 3, 5, 4, 6, 7, 8, 9
    第5次排序:0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • 这种排序方式被称为冒泡排序,冒泡排序是最慢的排序方式,数字少还可以凑合用,不适用于数据量较大的排序
const arr = [9, 1, 3, 2, 8, 0, 5, 7, 6, 4];
for(let i = 0; i < arr.length - 1; i++) {
  for(let j = 0; j < arr.length - 1 - j; j++) { //  - 是每次内循环减一次提高效率
    // arr[j](前边的元素) arr[j+1](后边元素)
    if(arr[j] > arr[j + 1]) {
      // 大数在前,小数在后,需要交换两个元素的位置
      let temp = arr[j]; // 临时变量用来存储arr[j]的值
      arr[j] = arr[j + 1]; // 将arr[j+1]的值赋给arr[j]
      arr[j + 1] = temp; // 修改arr[j+1]的值
    }
  }
  console.log("第"+(i+1)+"次排序:" + arr);
}
/*
  第1次排序:1,3,2,8,0,5,7,6,4,9
  第2次排序:1,2,3,0,5,7,6,4,8,9
  第3次排序:1,2,0,3,5,6,4,7,8,9
  第4次排序:1,0,2,3,5,4,6,7,8,9
  第5次排序:0,1,2,3,4,5,6,7,8,9
  第6次排序:0,1,2,3,4,5,6,7,8,9
  第7次排序:0,1,2,3,4,5,6,7,8,9
  第8次排序:0,1,2,3,4,5,6,7,8,9
  第9次排序:0,1,2,3,4,5,6,7,8,9
*/

思路2(选择排序):

  • 取出一个元素,然后将其他元素和该元素进行比较,如果其他元素比该元素小,则交换两个元素的位置
  • 例子:9, 1, 3, 2, 8, 0, 5, 7, 6, 4
    第1次排序:0, 9, 3, 2, 8, 1, 5, 7, 6, 4
    第2次排序:0, 1, 9, 3, 8, 2, 5, 7, 6, 4
    第3次排序:0, 1, 2, 9, 8, 3, 5, 7, 6, 4
    第4次排序:0, 1, 2, 3, 9, 8, 5, 7, 6, 4
    第5次排序:0, 1, 2, 3, 4, 9, 8, 7, 6, 5
    第6次排序:0, 1, 2, 3, 4, 5, 9, 8, 7, 6
    第7次排序:0, 1, 2, 3, 4, 5, 6, 9, 8, 7
    第8次排序:0, 1, 2, 3, 4, 5, 6, 7, 9, 8
    第9次排序:0, 1, 2, 3, 4, 5, 6, 7, 8, 9
    第10次排序:0, 1, 2, 3, 4, 5, 6, 7, 8, 9
const arr = [9, 1, 3, 2, 8, 0, 5, 7, 6, 4];
for(let i = 0; i < arr.length; i++) {
  for(let j = i + 1; j < arr.length; j++) {
    // arr[i](前边的元素) arr[i+1](后边元素)
    if(arr[i] > arr[j]) {
      // 大数在前,小数在后,需要交换两个元素的位置
      let temp = arr[i]; // 临时变量用来存储arr[i]的值
      arr[i] = arr[j]; // 将arr[j]的值赋给arr[i]
      arr[j] = temp; // 修改arr[j]的值
    }
  }
  console.log("第"+(i+1)+"次排序:" + arr);
}
posted @ 2023-01-23 11:18  码农张3  阅读(26)  评论(0)    收藏  举报