假设列表[4,5,2,1,3],按从小到大排序。
外层for循环是定义比较轮数,内层for循环指的是交换次数。那么就会两层for循环例如A(外)和B(内)且 A<len(列表长度)-1,因为五个元素,只需要比较四次。B<len(列表长度)-1-i(当前A循环的次数i),因为每轮最后一个元素都会变成最大的,于是后续就不需要进行重复比较。
例如第一次循环,外层为0(下标),内层是0,然后通过判断元素下标来交换元素。
第二次循环,外层下标为1,内层要额外除去第一轮排序的最后一个元素(因为已经有最大值在最后了,不需要比较)
Y = [4,5,2,1,3]
len = length(Y) // 假设 len 是获取列表长度的函数
// 外层循环:控制比较的轮数
// n个元素需要 n-1 轮比较
for(var i = 0; i < len - 1; i++){
// 内层循环:控制每轮比较的次数
// 每轮将当前未排序部分的最大元素“冒泡”到末尾
// 每次外层循环结束后,都会有一个元素(最大的)排到正确位置
for(var j = 0; j < len - 1 - i; j++){
// 比较相邻的两个元素
// 如果 Y[j] 大于 Y[j+1],则交换它们
if(Y[j] > Y[j+1]){
// 交换操作
m = Y[j+1]
Y[j+1] = Y[j]
Y[j] = m
// 或者使用更简洁的交换方式,如 Python: Y[j], Y[j+1] = Y[j+1], Y[j]
}
}
}