基础排序算法总览

基础排序算法总结 一、冒泡排序 冒泡排序的普通思路:          比较相邻的两个元素,交换元素使得小元素在前、大元素在后。          第一次排序将对n个元素进行n-1次比较,将最大的元素放到了数组的最后边;          第二次排序将剩下的n-1个元素进行n-2次比较,将第二大的数放在数组的倒数第二个位置;          依次进行该过程;          第n-1趟则所有元素 阅读详情

基础排序算法总览

    涉及到相关的算法:

  • 冒泡排序:O(N^2)
  • 插入排序:O(N^2)
  • 选择排序:O(N^2)
  • 归并排序:O(NlogN)
  • 快速排序:O(NlogN)

冒泡排序

    比较相邻的两元素,不满足大小关系则互换,一次遍历能将一个元素放到正确的位置上。完成排序需要N次遍历,则事件复杂度O(N^2),可以不使用额外的数据结构,则空间复杂度为O(1),可以相等时不交换,则是稳定的排序算法。

    Python3代码大致如下:

from typing import List

def bubbleSort(nums: List[int])-> None:
    n = len(nums)
    if n < 2:
        return
    
    for i in range(0, n):
        for j in range(0, n-i-1):
            if nums[j] < nums[j+1]:
                nums[j],nums[j+1] = nums[j+1], nums[j]
    
nums = [2, 3, 5, 7, 1, 9, 3]
bubbleSort(nums)
print(nums)

插入排序

    开始将第一个元素划分为有序区间,后面为无序区间,逐步将无序区间的元素插入到有些区间中。两层循环,一个区间划分遍历一次数据,第二层插入数据,大致为O(N^2),空间复杂度为O(1),数据相等时不交换,稳定的排线算法。代码大致如下:

from typing import List

def insertionSort(nums: List[int])-> None:
    n = len(nums)
    if n < 2:
        return
    
    for i in range(1, n):
        value = nums[i]
        # 寻找插入的位置
        j = i - 1
        while j > -1:
            # 数据往后移
            if nums[j] < value:
                nums[j+1] =  nums[j]
            else:
                break
            j = j - 1
        # 插入数据
        nums[j+1] = value
                
nums = [2, 3, 5, 7, 1, 9, 3]
insertionSort(nums)
print(nums)

选择排序

    开始划分1个有序区间,后面查找最小或最大元素放入区间内。时间复杂度O(N^2),空间O(1),不稳定。代码大致如下:

from typing import List

def selectSort(nums: List[int])-> None:
    n = len(nums)
    if n < 2:
        return
    
    for i in range(0, n-1):
        for j in range(i+1, n):
            if nums[i] < nums[j]:
                nums[i], nums[j] = nums[j], nums[i]
                
nums = [2, 3, 5, 7, 1, 9, 3]
selectSort(nums)
print(nums)

归并排序

    使用分治的思路,把数组分成两半,分别排序,排序后进行合并。大致代码如下:

from typing import List

def mergeSort(nums: List[int])-> List[int]:
    n = len(nums)
    if n == 1:
        return nums
    
    mid = n // 2
    lsort = mergeSort(nums[:mid])
    rsort = mergeSort(nums[mid:])
    return merge(lsort, rsort)

def merge(nums1: List[int], nums2: List[int])-> List[int]:
    nums = []
    n = len(nums1)
    m = len(nums2)
    index1 = 0
    index2 = 0
    while index1 < n or index2 < m:
        if index1 >= n:
            nums.append(nums2[index2])
            index2 = index2 + 1
        elif index2 >= m:
            nums.append(nums1[index1])
            index1 = index1 + 1
        elif nums1[index1] < nums2[index2]:
            nums.append(nums1[index1])
            index1 = index1 + 1
        else:
            nums.append(nums2[index2])
            index2 = index2 + 1
    return nums


nums = [2, 3, 5, 7, 1, 9, 3]
print(mergeSort(nums))

快速排序

    也是使用分治的思路,随机选取其中一个数最为分界点,把小于其的数反左边或右边,大于其的数类似。大致代码如下:

from typing import List

def quickSort(nums: List[int], start: int, end: int)-> None:
    if start >= end:
        return
    
    mid = partition(nums, start, end)
    # 注意后面排序的序号,排序是不包括分界元素的
    quickSort(nums, start, mid-1)
    quickSort(nums, mid+1, end)
    
    
def partition(nums: List[int], start: int, end: int)-> int:
    """
    选取最后一个元素为分界,小于的放左,使用了双指针交换元素
    """
    value = nums[end]
    index = start
    for i in range(start, end):
        if nums[i] < value:
            nums[i], nums[index] = nums[index], nums[i]
            index = index + 1
    nums[index], nums[end] = nums[end], nums[index]
    return index


nums = [2, 3, 5, 7, 1, 9, 3]
quickSort(nums, 0, len(nums)-1)
print(nums)
十大排序算法代码总览(C++) 注: 算法稳定性 定义:待排序序列中的相同关键字记录经过排序后相对次序保持不变。比如Xm=xn,原本Xm在Xn之前,排序后依然Xm在Xn之前。 条件:算法的稳定性由具体算法决定,且在一定条件下算法稳定性也会发生转变。 稳定性意义:只有在排序一个复杂对象的多个数字属性且初始顺序存在意义时,才需要注意算法的稳定性,即需要尽量保持原有排序序列的意义。比如原本商品按价格高低排序,想着想要按销量... 阅读详情

相关推荐

基础算法——排序算法(C++语言)

排序算法在计算机科学与数据处理领域占据核心地位,是众多算法体系的重要基础组成部分。其核心任务是依据既定的顺序关系(如数值大小、字母顺序等),对一组数据元素进行重新排列,使数据从无序状态转变为有序状态。基础排序算法作为排序算法研究的入门内容,涵盖了多种经典且易于理解的算法,如冒泡排序、选择排序和插入排序等。这些算法基于简单直观的原理,通过反复执行比较和交换或插入操作来实现数据的排序。尽管它们在面对大规模数据时,时间复杂度可能较高,效率相对有限,但它们在算法教育和理论研究方面具有不可替代的价值。

2301_81974500的博客 1264

基础排序算法总览--JAVA

基础排序算法如下: 1 插入类排序,如直接插入,折半插入,希尔排序等。 2 交换类排序,如冒泡排序,快速排序等。 3 选择类排序,如选择排序,堆排序等。 4 归并类排序,如归并排序等。 5 分配类排序,如基数排序等。 基础排序算法一览 排序方法 平均情况 最好情况 最坏情况 辅助空间 稳定性 直接插入 O(n2)O(n^2) O(n)O(

manu_zhang的博客 589

算法之排序算法:从基础到实战

大家好!我写这篇文章的初衷是想和大家一起学习进步。在计算机科学领域,算法是核心,排序算法更是基础中的基础,掌握它对提升编程能力至关重要。今天,咱们就来深入学习排序算法,希望能和大家共同成长,一起探索算法世界的奥秘。

wj_rdk的博客 1453

算法基础之排序算法

文章脉络          算法    什么是算法?     算法是解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。 排序算法就是对排序的一种解决方案;而查找算法就是对查找的解决方案。    算法用来干什么?     提高计算机速度并节省存储空间一直成为编程人员努力的方向,排序操作成为程序设计人员考虑的因素之一,排序方法选择得当

李达 2076

算法之Java排序算法:从基础到进阶的全面解析

在编程学习的道路上,排序算法是非常重要的基础内容。今天,咱们一起深入研究Java中的排序算法,从union-find算法的练习与拓展,到初级排序算法的学习,希望能和大家共同进步,提升我们的编程技能!

wj_rdk的博客 1540

C#中基础排序算法

C#中基础排序算法 大家好,我是苏州程序大白。今天是五一假最后一天了。大家做好上班的准备了吗???五一大家去哪里玩了。在评论区分享下。不多说了。下面讲讲C#中基本的排序算法。 在计算机中实现存储数据最普遍的两种操作就是排序和查找. 这是从计算机产业初始就已被确认的事实. 这意味着排序和查找也是计算机科学领域最值得研究的两种操作. 本书提到的许多数据结构的主要设计目的就是为了使排序和/或查找更加简单, 同时也是为了数据在结构内的存储更加有效。 本章会介绍有关数据排序和查找的基础算法. 这些算法仅依赖数组作为数

苏州程序大白的博客 476

排序算法(6种基础排序算法)

1、冒泡排序 (1)(1)(1) 算法原理 冒泡排序在所有排序算法中,属于比较基础的一种。它的原理就是通过遍历待排序元素列,依次比较相邻元素,按照一定的规则调整它们的顺序(如何复合规则,则继续遍历),直至排序完毕。 一般来说,这个算法都是用来针对数组排序,而且往往最终结果都是非降序排列的,因此狭义地来说,冒泡排序可以归纳为: a. 比较相邻元素,若前者大于后者,则进行交换; b. 对每一组相邻元素...

weixin_44650011的博客 1851

掌握排序算法:从基础到实践

时间复杂度是评估算法效率的主要指标之一,它描述了算法执行时间与输入数据规模之间的关系。在算法理论中,我们通常用大O表示法(Big O notation)来表示时间复杂度,它提供了一个上界,用来描述最坏情况下的运行时间。具体来说,时间复杂度关注的是算法运行次数随着输入规模n的增长而增长的趋势。比如,如果一个算法的运行时间与输入规模n成正比,则我们说这个算法具有线性时间复杂度O(n)。

weixin_30481539的博客 720

排序算法解析:从基础到高级

排序算法是将一组数据按照特定的顺序重新排列的算法。它们可以根据不同的性能指标进行分类,如时间复杂度、空间复杂度和稳定性。

无远弗届 1054

WSL2 Ubuntu 22.04安装NVIDIA驱动避坑指南:从驱动版本选择到CUDA环境验证

本文详细介绍了在WSL2 Ubuntu 22.04中安装NVIDIA驱动和配置CUDA环境的完整流程,包括驱动版本选择、环境变量设置以及常见问题解决方案。通过本指南,用户可以避免常见的安装陷阱,确保GPU加速环境正确配置,适用于深度学习开发和CUDA编程。

weixin_28419039的博客 463

从车机到广告屏:CS5523芯片在5大显示场景的应用方案全解析

本文全面解析了CS5523芯片在车载显示、数字广告机、医疗设备和工业HMI等五大场景的应用方案。作为高性能MIPI转eDP芯片,CS5523凭借出色的兼容性和低功耗特性,成为国产替代方案的优选。文章详细介绍了芯片架构、核心技术及实际应用中的设计要点,为工程师提供全面的技术参考。

julia4scientist的博客 902

排序算法(基础)大全

总之,排序算法能够对数据进行有序排列,提高数据的组织性和可读性,提高查找和统计等操作的效率,是计算机科学和实际应用中的基础算法之一。在有序的数据中,可以使用更加高效的查找算法,如二分查找、插值查找等,减少了查找的时间复杂度。例如,在合并两个有序的数组时,可以使用归并排序算法。其中k是最大数的位数,n是待排序数据的个数。排序算法的主要作用是将一组数据按照特定的顺序进行排列,使得数据更加有序和有组织。缩小增量,重复第2步的操作,直到增量为1,即进行。原数组:[5,4,2,7,1,6,8,3]

qq_74143684的博客 1198

ORB-SLAM3在windows11下的编译使用

近期在学习SLAM,想部署一下ORB-SLAM3,但是自己电脑是win11系统,因此就想着在win11上部署一下。但是网上看了一些教程,有一些博客,但是可能不适合我这种情况把,就很纠结。先说下结果,配置成功,过程极其痛苦。

weixin_44457768的博客 6095

排序算法基础

在计算机科学中,排序算法是数据处理和组织的核心工具之一。从日常应用到编程竞赛,排序算法广泛应用于对数据的有效管理和处理。排序算法可以帮助我们更快地找到目标数据、优化其他算法的效率,并为各种高级算法打下坚实基础。本文目标是帮助读者理解排序算法的基本概念和用途,并为后续排序算法的学习奠定基础。

安祝老师的博客 1239

FPGA中参数化SPI接口设计与Verilog实现

SPI(串行外设接口)作为嵌入式系统的核心通信协议,通过全双工、高速率特性在FPGA与Flash、ADC等外设交互中占据重要地位。参数化设计通过抽象时钟极性、数据位宽等可配置维度,采用分层架构实现硬件复用,显著提升开发效率。Verilog实现需重点处理跨时钟域同步和可配置帧结构,结合AXI总线集成与UVM验证方法学,可构建适应工业控制、物联网网关等场景的高可靠SPI解决方案。

ciya3282的博客 1406

青龙面板实战:用快手极速版脚本日赚XX元的核心参数解析

本文深入解析了青龙面板运行快手极速版脚本的核心参数配置,旨在帮助进阶用户提升收益稳定性。重点剖析了设备标识符(did)的获取原理、多账号Cookie的精准拼接规则,以及如何通过科学设置定时任务频率来量化并优化收益,实现细水长流的稳定收益。

weixin_29310605的博客 1073

总览十大经典排序算法

排序算法是《数据结构与算法》中最基本的算法之一,排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 十大经典排序算法分别是: 1、冒泡排序 2、选择排序 3、插入排序 4、希尔排序 5、归并排序 6、快速排序 7、堆排序 8、计数排序 9、桶排序 10、基数排序 用一张图...

饶艳辉 304

Agentic-Desktop-Pet:构建本地智能桌面助手的架构与实践

智能体(Agent)作为人工智能领域的重要概念,是指能够感知环境、自主决策并执行任务以实现目标的软件实体。其核心原理在于结合感知、决策与执行模块,通过大语言模型(LLM)等推理引擎处理信息并驱动行动。这种架构的技术价值在于将AI的认知能力与具体的操作系统环境深度融合,从而创造出能主动理解用户上下文、提供个性化服务的智能伙伴。在应用场景上,智能体技术正从云端对话机器人向本地化、场景化的桌面助手演进,旨在解决传统自动化工具缺乏智能、而纯聊天机器人脱离操作环境的问题。本文探讨的Agentic-Desktop-Pe

weixin_27210125的博客 621

十大排序基础排序算法总结 与 速度对比

1、十大排序基础排序算法总结 与速度对比 —— 耗时测试 测试环境:CPU: i5-3210M 2.5GHz 2.5GHz; 内存:4G; Win10 64位系统; VS 2015 release模式 32位。 测试数据均为 int 类型: 取值规则为:(rand() % (N)) * 3 - ra...

带熊超人 的博客 5027

openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

本文主要介绍了openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用openclaw-cn的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 10万+

统计学习导论(ISLR) 第四章分类算法课后习题

统计学习导论(ISLR) 参考资料: The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导论(ISLR)(二):统计学习概述 统计学习导论(ISLR)(三):线性回归 统计学习导论(ISLR)(四):分类 ISLR统计学习导论之R语言应用(二):R语言基础 ISLR统计学习导论之R语言应用(三):线性回归R语言代码实战 ISLR统计学习导论之R语言应用(四):分类算法R语言代码实战 统计学习导论

阿里云专家博主、数据科学领域优质创作者、统计er在读 2万+

基础篇-C语言的链表以及一些基础的排序算法

1.链表是一种线性数据结构,由一系列节点组成。例如int age;//定义他的参数int age;//定义指向下一节点的指针变量 ,类型为定义的student 结构体两种方法都可以具体想象为挂东西的方式,一个把head当第一个,依次在head前面挂钩一个,另一个尾插法更符合现实生活中挂东西成线的方式,即是把head当成第一个挂的参照 head的下一个(next)就与新挂上来的钩子放在一起,接着新挂上来的就作为第一个,两者仅参照对方,交换一个位置后继续挂...

m0_62587144的博客 2354

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

排序算法总览

func.h #include <iostream> using namespace std; #include <time.h> #define N 100 #define SWAP(a,b){int tmp;tmp = a;a = b;b = tmp;} void arr_print(int *,int); void arr_bubble(int *,int);//冒泡排序 void arr_select(int *,int);//选择排序 void arr_insert(int

weixin_42060519的博客 181

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

基础排序算法--选择法

基础排序算法–选择法 相对于冒泡法,选择法不是一个一个的位置变换,而是利用了指针, 实现先是地址的变换,然后再交换地址上的值。 动图理解 代码解析 package ccc; import java.util.Scanner; //输入一行数,选择法排序,从小到大输出 public class T2 { public static void main(String[] args) { i...

weixin_44542357的博客 1588

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

排序总览

排序总览概述1. 冒泡2. 直接插入排序3. 直接选择排序4. 堆排序5. 计数排序6. 桶排序7. 希尔排序8. 快速排序9. 归并排序具体代码实现1. 冒泡2. 直接插入排序3. 直接选择排序4. 堆排序5. 计数排序6. 桶排序7. 希尔排序8. 快速排序9. 归并排序 概述 这短时间找各种排序学了下,头晕脑胀的。猴子掰玉米,学的时候原理都理解了,可是记住了这个,忘记了前面的。。。 所以特意做个总览,把优缺点和特性梳理下。也方便后续查找。 大概描述下排序算法思路简介,和各个排序的C#实现。重点是描述下

Bilibili_Cheers的博客 610
上一篇: Windows下JetBrains CLion的pthread使用配置
下一篇: 堆与堆排序
_萧_
博客等级 码龄10年 55粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值