冒泡排序的理解

小知識 · 昨天 · 4 人浏览

假设列表[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]
    }
}

}

本站立足于美利堅合衆國,請讀者自覺遵守當地法律!如有違規,本站不承擔任何法律責任! This site is based in the United States of America, readers are requested to abide by local laws! If there are any violations, this site does not bear any legal responsibility! Theme Jasmine by Kent Liao