首页 > 编程语言 >几种常见排序算法

几种常见排序算法

时间:2024-03-13 17:55:17浏览次数:26  
标签:arr temp ++ length 几种 curValue 算法 let 排序


冒泡排序

从小到大排 两个两个排序,这样最大的就在后面,下楼排序就排除最后一个,每次循环减一即可,还可以加一个状态,只要有一个状态不变,顺序是正确的

import { ref } from 'vue'
let arr1 = ref([])
const a1 = (arr: any) => {
  for (let i = 0; i < arr.length - 1; i++) {
    let flag = false
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = temp
        flag = true
      }
    }
    if (!flag) return arr
  }
  return arr
}
arr1.value = a1([3, 7, 2, 9, 4, 8, 1, 5, 6])

 

 

插入排序

从小到大排 默认第一个元素是排好的,从第二个元素开始循环,跟当前循环下标元素前面的数组循环比较,循环不可以超过下标0以及有比当前下标元素更小的值,满足条件的循环里,把循环的元素往后移,因为都比当前下标大。

let arr2 = ref([])
const a2 = (arr: any) => {
  for (let i = 1; i < arr.length; i++) {
    let curValue = arr[i]
    // let j = i - 1
    // while (j >= 0 && curValue < arr[j]) {
    //   arr[j + 1] = arr[j]
    //   j--
    // }
    // arr[j + 1] = curValue
    for (let j = 0; j < i ; j++) {
      if (arr[j] > curValue) {
        let temp = arr[j]
        arr[j] = curValue
        curValue = temp
      }
    }
    arr[i] = curValue
  }
  return arr
}
arr2.value = a2([3, 7, 2, 9, 4, 8, 1, 5, 6])

 

 

选择排序

从小到大排 从第一个元素开始,比较所有元素包含第一个元素,取得最小值,然后与第一个元素交换下标。然后以此类推,直到倒数第二个

let arr3 = ref([])
const a3 = (arr: any) => {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) {
        let temp = arr[i]
        arr[i] = arr[j]
        arr[j] = temp
      }
    }
  }
  return arr
}
arr3.value = a3([3, 7, 2, 9, 4, 8, 1, 5, 6])

 

 

快递排序

从小到大排 默认取数组第一个为基准点,把比它小的放一个数组里,大的又放另一个数组里,输出的时候,要递归左右两个数组即可

let arr4 = ref([])
const a4 = (arr: any) => {
  if (arr.length <= 1) {
    return arr
  }
  let curVaule = arr[0]
  let leftArr = []
  let rightArr = []
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < curVaule) {
      leftArr.push(arr[i])
    } else {
      rightArr.push(arr[i])
    }
  }
  return [...a4(leftArr), curVaule, ...a4(rightArr)]
}
arr4.value = a4([3, 7, 2, 9, 4, 8, 1, 5, 6])

 

标签:arr,temp,++,length,几种,curValue,算法,let,排序
From: https://www.cnblogs.com/ssszjh/p/18071209

相关文章

  • 代码随想录算法训练营第七天 | 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之
    day7记录代码随想录第一题力扣454.四数相加II 给定四个包含整数的数组列表 A,B,C,D,计算有多少个元组(i,j,k,l) ,使得 A[i]+B[j]+C[k]+D[l]=0。为了使问题简单化,所有的A,B,C,D具有相同的长度 N,且0≤N≤500。所有整数的范围在-2^28到......
  • 代码随想录算法训练营第四十五天| ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全
    爬楼梯 (进阶)题目链接:57.爬楼梯(第八期模拟笔试)(kamacoder.com)思路:笑嘻了,直接给默写出来了。#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m;cin>>n>>m;vector<int>dp(n+1);dp[0]=1;for(inti=1;i<=n;i++){for(in......
  • 【ajax】post请求的几种常用数据格式
    application/x-www-form-urlencoded这是默认的POST请求数据类型,也是HTML表单提交的默认类型;数据以键值对的形式编码,通过&链接。该类型只能发送文本字段;注意:要与get参数的query传参区分开,该请求参数是在请求体中。multipart/form-data当需要上传附件时,需要使用该数据格式;......
  • 设计模式学习(一)单例模式的几种实现方式
    设计模式学习(一)单例模式的几种实现方式前言饿汉式懒汉式懒汉式DCLP局部静态式(Meyers'Singleton)单例模板参考文章前言单例模式,其核心目标是确保在程序运行的过程中,有且只有存在一个实例才能保证他们的逻辑正确性以及良好的效率。因此单例模式的实现思路就是确保一个......
  • 拓展欧几里得算法
    一、拓展欧几里得算法1.1算法简析根据裴蜀定理,对任意\(a\)和\(b\),一定存在\(x\)和\(y\),使\(ax+by=\text{gcd}(a,b)\)。拓展欧几里得算法不仅能求出\(a\)和\(b\)的最大公约数,而且能找到一对\((x,y)\)使该方程成立。设求解\(ax+by=\text{gcd}(a,b)\)......
  • Java中线程的几种创建方式
    本文章将简单介绍有关java的四种线程创建方式一.继承Thread类//继承了Tread的类->MyTreadpublicclassMyThreadextendsThread{//线程启动后将要运行的代码@Overridepublicvoidrun(){System.out.println("通过继承Thread的方式来创建线程")......
  • 【算法】【线性表】【数组】从中序与后序遍历序列构造二叉树
    1 题目给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。示例1:输入:inorder=[9,3,15,20,7],postorder=[9,15,7,20,3]输出:[3,9,20,null,null,15,7]示例2:输入:inor......
  • 【数据结构初阶 9】内排序
    文章目录......
  • 4.13 ACM-ICPC算法 字符串之后缀自动机
    4.13ACM-ICPC算法:字符串之后缀自动机在竞赛编程,尤其是ACM-ICPC竞赛中,字符串算法占据了极其重要的位置。其中,后缀自动机(SuffixAutomaton,简称SAM)以其强大的功能和高效的性能,成为了解决字符串问题的利器。本文旨在介绍后缀自动机的基本概念、构建方法以及在算法竞赛中的应......
  • 数据结构与算法学习(01)交换函数的指针陷阱
    先看以下正确的例子 voidswap(int*px,int*py){inttemp;temp=*px;/*间接取*/*px=*py; /*间接取,间接存*/*py=temp; /*间接存*/}int main(void){inta=2,b=3;swap(&a,&b);printf("a=%d,b=%d",a,b);return......