数据结构中各种排序算法的js实现

复习数据结构中的各个排序算法,主要为了自己查看~

1.快排

快排用了分治的思想
时间复杂度:最优(nlogn)最差(n**2)
空间复杂度:logn

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
let dat=[4,1,5,7,2,0,3,7];

function quickSort(data){
  if(data.length<=1){
    return data;
  }
//此处要将基准数从原数组移除,避免上面的data.length判断陷入死循环
  let baseData=data.splice(0,1)[0];
  //console.log(baseData);
  let leftData=[],rightData=[];
//注意此处的data.length和上面不同,移除了基准数,比 上面小1
  for(let i=0;i<data.length;i++){
    if(data[i]>baseData){
      rightData.push(data[i]);
    }else{
      leftData.push(data[i]);
    }
  }
  leftData=quickSort(leftData);
  rightData=quickSort(rightData);
  // return leftData.concat(baseData,rightData);
  return   [...leftData, baseData, ...rightData];
}
var sortedData=quickSort(dat);
console.log(sortedData);
  </script>
</body>
</html>

2. 冒泡排序

 <script>
    function bubbleSort(arr){
      for(let i=0; i<arr.length ;i++){
        for(let j=arr.length-2; j>=i ;j--){
          if(arr[j+1] < arr[j]){
            [arr[j+1],arr[j]] = [arr[j],arr[j+1]] //利用解构实现交换值
          }
        }
      }
      return arr
    }
    var a=[9,3,5,2,8,4,1,0,6]
    console.log(bubbleSort(a));
</script>

3. 选择排序

  <script>
    function simpleSelectSort(arr){
      let min;
      for(let i=0;i<arr.length;i++){
        min=i;
        for(let j=i+1;j<arr.length;j++){
          if(arr[min]>arr[j]){
            min=j;
          }
        }
        if(min!==i){
          [arr[i],arr[min]]=[arr[min],arr[i]]
        }
      }
      return arr
    }
    var a=[9,3,5,2,8,4,1,0,6]
    console.log(simpleSelectSort(a));
</script>

4. 直接插入排序

<script>
    function straightInsertionSort(arr){
      for(var i=1; i<arr.length; i++){
          var e=arr[i];
          for(var j=i-1; arr[j]>e && j>=0; j--){
            arr[j+1]=arr[j]
          }
          arr[j+1]=e
        }
      return arr
    }
    var a=[9,3,5,2,8,4,1,0,6]
    console.log(straightInsertionSort(a))
</script>

5. 希尔排序

<script>
    function shell(arr){
      for(let gap=parseInt(arr.length/2); gap>=1 ; gap=parseInt(gap/2)){
        for(let i=gap;i<arr.length;i++){      //相当于内部有个直接插入排序
          let e=arr[i]
          for(var j=i-gap; arr[j]>e && j>=0;j-=gap){
            arr[j+gap]=arr[j]
          }
          arr[j+gap]=e
        }
      }
      return arr
    }
    var a=[9,3,5,2,8,4,1,0,6]
    console.log(shell(a));
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值