冒泡排序:主要是将相邻的两个数进行比较,不管从大到小排还是从小到大排,思路都差不多。
<script setup>
import { ref, toRefs, onMounted, reactive, defineProps } from 'vue'
onMounted(() => {
handle()
})
const handle = () => {
const arr = [10, 1, 5, 9, 7, 2, 4, 6]
// 有八个数,要比较七轮,所以是长度减一
// arr.length = 8
for (let i = 0; i < arr.length - 1; i++) {
// 再将每两个相邻的数进行比较大小
// 排完一轮,然后再重新从第一个开始
//j < arr.length - i:每过一轮i,就对比出一个数,所以可减少一些循环次数
for (let j = 0; j < arr.length - i; j++) {
// 如果前面的数大于后面的数。就交换位置
if (arr[j] > arr[j + 1]) {
//const [x, y] = [arr[j + 1], arr[j]]
//arr[j] = x
//arr[j + 1] = y
//运用解构
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
}
}
</script>
比较过程:
原数组:[10, 1, 5, 9, 7, 2, 4, 6]。
有8个数值,进行7轮比较即可,每一轮再将相近的两个数进行比较,每进行一轮就可得出一个数。
j为n,就拿第n位和第n+1位进行比较,第n位的值>第n+1位的值,就交换位置,否则不换位置跳过此次循环,进行下一次循环比较
第一轮i=0,j最大为6,将进行7轮比较,基础数组:[10, 1, 5, 9, 7, 2, 4, 6]
j=0:10跟1比(基于[10, 1, 5, 9, 7, 2, 4, 6],第0位为10,第n+1位为1),交换位置,结果=[1, 10, 5, 9, 7, 2, 4, 6];
j=1:10跟5比(基于[1, 10, 5, 9, 7, 2, 4, 6],第1位为10,第n+1位为5),交换位置[1, 5, 10, 9, 7, 2, 4, 6];
j=2:10跟9比,交换位置[1, 5, 9, 10, 7, 2, 4, 6];
j=3:10跟7比,交换位置[1, 5, 9, 7, 10, 2, 4, 6];
j=4:10跟2比,交换位置[1, 5, 9, 7, 2, 10, 4, 6];
j=5:10跟4比,交换位置[1, 5, 9, 7, 2, 4, 10, 6];
j=6:10跟4比,交换位置[1, 5, 9, 7, 2, 4, 6, 10];
得出最后一位数:10。
第二轮i=1,j最大为5,将进行6轮比较,基础数组:[1, 5, 9, 7, 2, 4, 6, 10]
j=0:1跟5比,不换位置,结果=[1, 5, 9, 7, 2, 4, 6, 10];
j=1:5跟9比,不换位置,结果=[1, 5, 9, 7, 2, 4, 6, 10];
j=2:9跟7比,交换位置,结果=[1, 5, 7, 9, 2, 4, 6, 10];
j=3:9跟2比,交换位置,结果=[1, 5, 7, 2, 9, 4, 6, 10];
j=4:9跟4比,交换位置,结果=[1, 5, 7, 2, 4, 9, 6, 10];
j=5:9跟6比,交换位置,结果=[1, 5, 7, 2, 4, 6, 9, 10];
得出倒数第二位:9。
第三轮i=2,j最大为4,将进行5轮比较,基础数组:[1, 5, 7, 2, 4, 6, 9, 10]
j=0:1跟5比,不换位置,结果=[1, 5, 7, 2, 4, 6, 9, 10];
j=1:5跟7比,不换位置,结果=[1, 5, 7, 2, 4, 6, 9, 10];
j=2:7跟2比,交换位置,结果=[1, 5, 2, 7, 4, 6, 9, 10];
j=3:7跟4比,交换位置,结果=[1, 5, 2, 4, 7, 6, 9, 10];
j=4:7跟6比,交换位置,结果=[1, 5, 2, 4, 6, 7, 9, 10];
得出倒数第三位:7。
第四轮i=3,j最大为3,将进行4轮比较,基础数组:[1, 5, 2, 4, 6, 7, 9, 10]
j=0:1跟5比,不换位置,结果=[1, 5, 2, 4, 6, 7, 9, 10];
j=1:5跟2比,交换位置,结果=[1, 2, 5, 4, 6, 7, 9, 10];
j=2:5跟4比,交换位置,结果=[1, 2, 4, 5, 6, 7, 9, 10];
j=3:5跟6比,不换位置,结果=[1, 2, 4, 5, 6, 7, 9, 10];
得出倒数第四位:6。
由于第四轮就将结果比较出了,就省略了剩下的第五、六、七轮的比较过程,比较规则一样。