前端排序算法-----交换排序(冒泡排序+快速排序)

一. 冒泡排序
1.算法描述:
(1)依次比较相邻的元素,如果前者比后者大,交换两者的位置,循环至数组结束,确定数组最后一位。
(2) 重复以上的操作,循环至数组未确定的最后一位,确定该位置的值
2.算法实现:

  function bubbleSort(arr){
    //需要冒泡的次数
  	for(let i=0;i<arr.length-1;i++){
  	//每次冒泡要比较的次数
      for(let m=1;m<arr.length-i;m++){
         if(arr[m-1]>arr[m]){
           let temp=arr[m];
           arr[m]=arr[m-1];
           arr[m-1]=temp
         }
      }
    }
    return arr
 }

3.算法分析
最优时间复杂度:O(n)
最差时间复杂度:O(n的平方)
平均时间复杂度:O(n的平方)
空间复杂度: O(1)
稳定性:稳定(只有比它大才交换位置确保稳定性)
二.快速排序
1.算法描述
(1)将数组的第一个值作为中间值,其他的值依次与其进行比较按照大小分别push至左右两个数组。
(2)对左右两个数组进行同样的操作直至数组只含有一个元素。
(3)通过concat将left数组、midValue 、right数组连在一起。
2.算法实现

 function quickSort(arr){
    //定义中间值、left数组和right数组
	let midValue=arr[0];
	let left=[];
	let right=[];
	//数组递归操作的结束条件
	if(arr.length<=1)return arr
	//小于等于标准值放置左边,大于值放置在右边
	for(let i=1;i<arr.length;i++){
       if(arr[i]>midValue){
         right.push(arr[i])
       }else{
         left.push(arr[i])
       }
    }
    //数组的循环遍历和拼接
    return [].concat(quickSort(left)).concat(midValue).concat(quickSort(right))
 }

3.算法分析
最优时间复杂度:O(nlog2 n)
最差时间复杂度:O(n的平方)
平均时间复杂度:O(nlog2n)
空间复杂度: O(nlog2n)
稳定性:不稳定(小于等于它都放置到左边)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值