冒泡排序,插入排序,选择排序

冒泡排序 OK 两两比较,大数放到最后。双层循环
 
插入排序 假设前面的元素是有序的,从后面选取一个元素,跟前面的元素比较,如果前面的元素比这个元素大,那么前面的元素全部向后移动一位,给这个元素空间
插入排序:后面的元素插入合适的位置
 
 
选择排序 假设第一个元素是最小的元素,让其他元素跟这个元素比较,如果比这个元素还小,记录这个最小的元素下标,交换第一个元素和最小的元素,这样找到了最小的元素,后面的n-1个元素重复这个过程
选择排序:选择出最小的元素下标
 
 
 
原地排序—内存消耗:空间复杂度O(1)
排序算法的稳定性:source中存在值相等的元素,排序后,这两个值相等的元素前后位置不变
 
注意:选择排序是不稳定的!!!
 
 
插入排序为啥比冒泡排序好,因为插入排序只有一次赋值操作,冒泡排序有三次赋值操作
 
 
 
const chooseSort = (arr) => {
  //从后面选择出最小的元素下标
  for(var i = 0; i < arr.length; i++){
    var minIdx = i
    for(var j = i+1;j < arr.length;j++){
      if(arr[j] < arr[minIdx]){
        minIdx = j //找到最小的index
      }
    }
    var temp = arr[i]
    arr[i] = arr[minIdx]
    arr[minIdx] = temp
  }
  console.log('选择排序:',arr)
}

const insertSort = (arr) => {
  //假设前面的有序,后面取一个元素,插入合适的位置
  //https://www.runoob.com/w3cnote/insertion-sort.html
  for (var i = 1 ; i< arr.length;i++){
    var current = arr[i]
    var pre = i -1
    while(pre >= 0 && arr[pre] > current){
      arr[pre + 1] = arr[pre]
      pre--
    }
    arr[pre+1] = current
  }
  console.log('插入排序:',arr)

}


const bubleSort = (arr) => {
  for(var i = 0;i < arr.length;i++){
    for(var j = 0; j<arr.length-1-i ;j++){
      if(arr[j] > arr[j+1]){
        var temp = arr[j]
        arr[j] = arr[j+1]
        arr[j+1] = temp
      }
    }
  }
  console.log('冒泡:',arr)
}


const test = [4, 5, 6, 3, 2, 1]
chooseSort(test)

// insertSort(test)

// bubleSort(test)

 

posted on 2020-06-09 18:11  土匪7  阅读(90)  评论(0编辑  收藏  举报