冒泡排序学习笔记

77 阅读1分钟

3026993999-5c492d1ad9e08_articlex.gif

// 比大小
function cmp(v1, v2) {
  return v1 - v2;
}

// 交互位置
function swap(i1, i2, array) {
  let tmp = array[i1]
  array[i1] = array[i2]
  array[i2] = tmp
}

function bubleSort(array) {
  for (let end = array.length; end > 0; end--) {
    for (let begin = 1; begin < end; begin++) {
      if (cmp(array[begin],array[begin-1]) < 0) {
           swap(begin, begin-1,array)
      }
    }
  }
}



// 优化一
function bubleSort1(array) {
  for (let end = array.length; end > 0; end--) {
    let sort = false
    for (let begin = 0; begin < end; begin++) {
      if (cmp(array[begin],arra[begin+1]) < 0) {
        swap(begin,begin+1,array)
        sort = true
      }
    }

    // 如果已经是排好序的那么退出循环
    if (!sort) {
      break
    }
  }
}

// 优化二
function bubleSort2(array) {
  for (let end = array.length - 1; end > 0; end--) {
    let sortedIndex = 1;
    for (let begin = 1; begin <= end; begin++) {
      if (cmp(array[begin], array[begin - 1]) < 0) {
        swap(begin, begin - 1, array)
        // 记录最后一次交互的位置
        sortedIndex = begin
      }
    }
    // 下次循环的时候结束的位置
    end = sortedIndex
  }
}