11、排序
思路一:
冒泡排序
9, 1, 3, 2, 8, 0, 5, 7, 6, 4
-
比较相邻的两个元素,然后根据大小来决定是否交换它们的位置
-
例子:
第一次排序:1, 3, 2, 8, 0, 5, 7, 6, 4, 9
第二次排序:1, 2, 3, 0, 5, 7, 6, 4, 8, 9
第三次排序:1, 2, 0, 3, 5, 6, 4, 7, 8, 9
…
倒数第二次 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 -
这种排序方式,被称为冒泡排序,冒泡排序是最慢的排序方式,
数字少还可以凑合用,不适用于数据量较大的排序
<script>
const arr = [9, 1, 3, 2, 8, 0, 5, 7, 6, 4]
for (let j = 0; j < arr.length - 1; j++) {
for (let i = 0; i < arr.length - 1; i++) {
// arr[i] 前边的元素 arr[i+1] 后边元素
if (arr[i] < arr[i + 1]) {
// 大数在前,小数在后,需要交换两个元素的位置
let temp = arr[i] // 临时变量用来存储arr[i]的值
arr[i] = arr[i + 1] // 将arr[i+1]的值赋给arr[i]
arr[i + 1] = temp // 修改arr[i+1]的值
}
}
}
console.log(arr)
</script>
冒泡优化
<script>
/*
1, 3, 2, 8, 0, 5, 7, 6, 4, 9
1, 2, 3, 0, 5, 7, 6, 4, 8, 9
1, 2, 0, 3, 5, 6, 4, 7, 8, 9
1, 0, 2, 3, 5, 4, 6, 7, 8, 9
*/
const arr = [9,1,3,2,8,9,0,5,7,6,4]
//使用优化后的冒泡排序-----内层循环条件变为length-1-j;呈斜线减少查询次数
for(let j = 0; j < arr.length -1; j++){
for (let i = 0; i < arr.length - 1 - j; i++) {
if (arr[i] > arr[i + 1]) {
let temp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = temp
}
}
console.log(arr)
}
</script>
思路2:
9, 1, 3, 2, 8, 0, 5, 7, 6, 4
- 取出一个元素,然后将其他元素和该元素进行比较,如果其他元素比该元素小则交换两个元素的位置
- 例子:
0, 9, 3, 2, 8, 1, 5, 7, 6, 4
0, 1, 9, 3, 8, 2, 5, 7, 6, 4
0, 1, 2, 9, 8, 3, 5, 7, 6, 4
…
选择排序
<script>
//选择排序
for(let i=0; i<arr.length; i++){
for(let j=i+1; j<arr.length; j++){
if(arr[i] > arr[j]){
// 交换两个元素的位置
let temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
}
console.log(arr)
</script>