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

冒泡排序 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   土匪7  阅读(92)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示