三大简单排序算法,冒泡 ,选择,插入

本文详细介绍了三种基本的排序算法:冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素的比较和交换,逐步将较大(或较小)的元素冒泡到数组的一端。选择排序则是在每一轮中找到当前未排序部分的最小值,与起始位置的元素交换。插入排序则是通过比较和移动元素,将每个新元素插入到已排序部分的正确位置。这些算法对于理解排序原理和优化算法具有重要意义。
摘要由CSDN通过智能技术生成

冒泡排序

逐个往上冒

冒泡的总次数为长度-1

里面第一个数第一数+1的数相比,比完换位置

冒泡的比较是一次

比一次少 最后达到一次结束

var arr = [12,14,23,22,1]
function fn(){
	for(var i=1; i<arr.length;i++){
		冒泡的次数
		for(var j=0;j<arr.length-i;j++){ 记录次数
			if(arr[j]>arr[j+1]){ 比较
			var temp =	arr[j] 换位置
            arr[j]=arr[j+1]	保留位置
            arr[j+1]=temp 
			}
			
		}
	}
}
 fn(arr)
console.log(arr);

选择排序

每次选择当前的第一个数为最小值

这个值跟后面的所有去做比较 然后对应的比我这个值还小的 把下标记录起来

将这个下标赋值给我们设置的变量名

判断是否为我们前面设置到的数值,如果是就不做操作,如果不是就进行换

//每次选择
var arr = [12,14,23,22,1]
 function fun(array){
     for(var i=0;i<array.length-1;i++){//选择下标
         //设置第一个数字为最小值
         var min=i
         for(var j=i+1;j<array.length;j++){//i+1,自己不用跟自己比
             if(array[min]>array[j]){    //如果比最小值还小
             min = j //使用设置的值换成记录下的值
             }
         }
         if(min!=i){//如果记录下的值跟我们刚开始指定的下标不一样
             var temp=array[i] //保存当前值的位置
             array[i] = array[min] //赋值
             array[min] =temp
         }
     }
 }
 fn(arr)
 console.log(arr);

插入排序

从后往前 初始下标为1

第一次比较为下标1和下标0比较一次

第二次比较为2和1比较 1和0比较 比较俩次

。。。。后面持续递增

var arr = [12,14,23,22,1]
function fr(array){
 for(var i=1;i<array.length;i++){ //下标从1开始
      for(var j=i;j>0;j--){   //从后往前排序
         if(array[j-1]>array[j]){ //俩数作比较 如果前面大于后面,进行换位
          var temp = array[j-1]
              array[j-1]=array[j]
              array[j] = temp
              }
           }
      }
   }
   
  fn(arr)
console.log(arr);
第二种插入排序 (完善,不管在排序的时候从哪里插入,都能排序好)
var arr = [12,14,23,22,1]
//array.length 是arr数组的长度
 function fr(array){
     for(var i=1;i<array.length;i++){//先选择下标
         var ps = i-1//获取前一个下标
         var pt = array[i]//保存当前的值,以防丢失
         while (ps>=0 && pt<array[ps]) {
             //如果前一个下标大于等于0 与  当前的值为小于上一个 
             array[ps+1]=array[pt]//将本身这个位置的赋值为上一个
             ps--//递减 继续往前走
         }
         array[ps+1]=pt//当前位置的值等于保存位置的值
     }
 }
 fr(arr)
 console.log(arr);

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值