排序算法总结(Python、Java)

Title of Content

  • 1 冒泡排序 Bubble sort
    • 概念
    • 排序可视化
    • 代码实现
      • Python - 基础实现
      • Python - 优化实现
      • Java - 优化实现
      • C - 优化实现
      • C++ - 优化实现
  • 2 选择排序 Selection sort
    • 概念
    • 排序可视化
    • 代码实现
      • Python
      • Java
  • 3 插入排序 Insertion sort
    • 概念


1 冒泡排序 Bubble sort

概念

解释:
compares adjacent items and swaps them if they are in the wrong order
每轮遍历后的效果:
最大/最小的元素到达数字末尾
口诀:
(对于一个升序序列)两两交换,大的冒到最后
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
优化实现: 当外层循环(对整个数组的一次遍历)的这一轮遍历时没有进行交换,意味着整个数组已经有序,迭代没有必要再进行。
在这里插入图片描述

排序可视化

https://www.hackerearth.com/practice/algorithms/sorting/bubble-sort/visualize/

代码实现

Python - 基础实现

def bubbleSort(intList, sort="asc"):
    """
    对整数列表进行冒泡排序。

    :param intList: 需要排序的整数列表。
    :param sort: 排序方式,"asc" 表示升序(默认),"desc" 表示降序。
                 如果提供了除 "asc" 或 "desc" 之外的 sort 参数,将默认采用升序排序。
    :return: None。函数直接对输入的列表进行排序,不返回任何值。
    """
    n = len(intList)

    # 如果 sort 参数不是 "asc" 或 "desc",默认为升序
    if sort not in ["asc", "desc"]:
        sort = "asc"

    for i in range(n):
        # inner sort
        # n-i-1 外层每循环i次,得到i个最大值在末尾,因此这i个位置不用比,-1是因为防止j+1越界
        for j in range(n - i - 1):

            if (sort == "asc" and intList[j] > intList[j + 1]) or \
                    (sort == "desc" and intList[j] < intList[j + 1]):
                temp = intList[j + 1]
                intList[j + 1] = intList[j]
                intList[j] = temp

# 测试代码
sample_intList = [60, 10, 90, 50, 100, 80, 70, 30, 40, 20]
bubbleSort(sample_intList, "desc")
print(sample_intList)
bubbleSort(sample_intList, "asc")
print(sample_intList)

排序结果:
在这里插入图片描述

Python - 优化实现

增加判断这轮迭代有无进行元素交换的标记swapped

def bubbleSort(intList, sort="asc"):
    """
    对整数列表进行冒泡排序。

    :param intList: 需要排序的整数列表。
    :param sort: 排序方式,"asc" 表示升序(默认),"desc" 表示降序。
                 如果提供了除 "asc" 或 "desc" 之外的 sort 参数,将默认采用升序排序。
    :return: None。函数直接对输入的列表进行排序,不返回任何值。
    """
    n = len(intList)

    # 如果 sort 参数不是 "asc" 或 "desc",默认为升序
    if sort not in ["asc", "desc"]:
        sort = "asc"

    for i in range(n):
        # inner sort
        # n-i-1 外层每循环i次,得到i个最大值在末尾,因此这i个位置不用比,-1是因为防止j+1越界
        for j in range(n - i - 1):
            swapped = False  # 这轮循环有无进行交换
            if (sort == "asc" and intList[j] > intList[j + 1]) or \
                    (sort == "desc" and intList[j] < intList[j + 1]):
                intList[j], intList[j + 1] = intList[j + 1], intList[j]
                swapped = True

        # 如果刚刚那轮内层的遍历没有进行过交换,意味着数组已经有序,没有必要再进行后续的遍历
        if not swapped:
            break

Java - 优化实现

public class Sort {
	/**
     * 对整数数组进行冒泡排序。
     * 
     * @param array 需要排序的整数数组。
     * @param sort 指定排序的类型,"asc" 表示升序,"desc" 表示降序。
     *             如果提供的 sort 参数不是 "asc" 或 "desc",将默认使用升序排序。
     */
    public static void BubbleSort(int [] array, String sort){
        
        int n = array.length;
        if (!(sort.equals("asc")||sort.equals("desc")))
        {
        	sort="asc";
        }
        for(int i=0;i<n;i++)
        {
        	boolean swapped=false;
        	
            for (int j=0;j<n-i-1;j++)
            {
            	if((sort.equals("asc")&&array[j]>array[j+1])||(sort.equals("desc")&& array[j]<array[j+1])){
            		swapped=true;
            		int temp=array[j+1];
            		array[j+1]=array[j];
            		array[j]=temp;
            	}
            }
            if (!swapped){
            	break;
            }
        }

    }
    public static void main(String[] args) {
        int[] array={60, 10, 90, 50, 100, 80, 70, 30, 40, 20};
        BubbleSort(array, "asc");
        for(int i=0;i<array.length;i++){
            System.out.printf("%d ",array[i]);
        }
        System.out.println();
        BubbleSort(array, "desc");
        for(int i=0;i<array.length;i++){
            System.out.printf("%d ",array[i]);
        }
        System.out.println();
    }
}

C - 优化实现


C++ - 优化实现


2 选择排序 Selection sort

概念

解释:
At each round i: find the minimum in {item i, item i+1, … } and swap it to the position i
每一轮迭代,找到一个最小的值,将它和这第i轮迭代对应的数组中位置i的原数字位置对调。

每轮遍历后的效果:
For each pass, we will move left to right looking for the next largest value. Once that is found, it will be swapped into its final position .

口诀:
第i轮遍历时,将未排序序列中最小/大的数放到位置i。
在这里插入图片描述
在这里插入图片描述
初始化时,选择数组中第一个值为最大值:
在这里插入图片描述

排序可视化

https://www.hackerearth.com/practice/algorithms/sorting/selection-sort/visualize/

代码实现

Python

def selectionSort(intList, sort="asc"):
    # 升序序列找的是最小值,降序序列找的是最大值
    if not (sort == "asc" or sort == "desc"):
        sort = "asc"

    for i in range(len(intList) - 1):
        # 每轮循环开始时,重置 min_or_max_i 为当前轮的起始位置
        min_or_max_i = i

        # 每一轮内层迭代的目的是找到带排序序列中最小/大值的下标j,并将它赋值给minItem_i记录下来
        for j in range(i + 1, len(intList)):
            if (sort == "asc" and intList[j] < intList[min_or_max_i]) or \
                    (sort == "desc" and intList[j] > intList[min_or_max_i]):
                min_or_max_i = j
        # 找到带排序序列中的最小值后,将它赋值给数组的位置i,表示他是序列中第i小的元素
        # 这轮交换后得到的位置i,就是它的最终位置,因此外层循环只需要遍历len-1遍,前len-1个元素有序,整体有序
        if min_or_max_i != i:
            intList[i], intList[min_or_max_i] = intList[min_or_max_i], intList[i]

Java

3 插入排序 Insertion sort

概念

解释:
At each round i: {item 0, item 1, …, item i} are sorted

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/210737.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试就是这么简单,offer拿到手软(二)—— 常见65道非技术面试问题

面试系列&#xff1a; 面试就是这么简单&#xff0c;offer拿到手软&#xff08;一&#xff09;—— 常见非技术问题回答思路 面试就是这么简单&#xff0c;offer拿到手软&#xff08;二&#xff09;—— 常见65道非技术面试问题 文章目录 一、前言二、常见65道非技术面试问题…

算法题-统计字符个数(Python题解)

文章目录 前言思路code 前言 先前笔试做了一道算法题&#xff0c;题目是这样子的&#xff1a;&#xff08;PS&#xff1a;不用惊讶&#xff0c;是的&#xff0c;我不打算24今年考研了&#xff0c;一是&#xff0c;当初填报的学校不是我想要去的学校&#xff08;当初想一战成硕…

CAPL通过ethernetPacket发送以太网报文

文章目录 ethernetPacketCANoe帮助文档车载以太网协议函数CAPL通过ethernetPacket发送以太网报文例子ethernetPacket CANoe中,ethernetPacket类似于CAN的message. CANoe帮助文档 CANoe的帮助文档是很好的学习资料,后面会结合CANoe帮助文档来介绍车载以太网的相关内容。 车…

竞赛选题 : 题目:基于深度学习的水果识别 设计 开题 技术

1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/pos…

3_企业级Nginx使用-day2

企业级Nginx使用-day2 学习目标和内容 1、能够编译安装并使用第三方模块 2、能够理解location语法的作用 3、能够了解URL的rewrite重写规则 4、能够理解防盗链原理和实现 一、第三方模块使用 Nginx官方没有的功能&#xff0c;开源开发者定制开发一些功能&#xff0c;把代码公…

Linux中文件的打包压缩、解压,下载到本地——zip,tar指令等

目录 1 .zip后缀名&#xff1a; 1.1 zip指令 1.2 unzip指令 2 .tar后缀名 3. sz 指令 4. rz 指令 5. scp指令 1 .zip后缀名&#xff1a; 1.1 zip指令 语法&#xff1a;zip [namefile.zip] [namefile]... 功能&#xff1a;将目录或者文件压缩成zip格式 常用选项&#xff1a…

百度智能云文字识别使用问题解决合集

1.创建试用程序时需要16位的签名MD5 解决方法&#xff1a;使用Java8 201版本及以下的jdk创建签名 下载地址&#xff1a;http://www.codebaoku.com/jdk/jdk-oracle-jdk1-8.html#jdk8u201 生成签名代码&#xff1a;keytool -genkeypair -v -keystore D:\key.jks -storetype PKC…

Android实验:启动式service

目录 实验目的实验内容实验要求项目结构代码实现结果展示 实验目的 充分理解Service的作用&#xff0c;与Activity之间的区别&#xff0c;掌握Service的生命周期以及对应函数&#xff0c;了解Service的主线程性质&#xff1b;掌握主线程的界面刷新的设计原则&#xff0c;掌握启…

Java研学-配置文件

一 配置文件 1 作用–解决硬编码的问题 在实际开发中,有时将变量的值直接定义在.java源文件中;如果维护人员想要修改数据,无法完成(因为没有修改权限),这种操作称之为硬编码 2 执行原理: 将经常需要改变的数据定义在指定类型的文件中,通过java代码对指定的类型的文件进行操作…

(C语言)找出1-99之间的全部同构数

同构数&#xff1a;它出现在平方数的右边。例&#xff1a;5是25右边的数&#xff0c;25是625右边的数&#xff0c;即5和25均是同构数。 #include<stdio.h> int main() {for(int i 1;i < 100;i ){if((i*i % 10 i) || (i*i % 100 i))printf("%d\t%d\n",i,…

神经网络(第三周)

一、简介 1.1 非线性激活函数 1.1.1 tanh激活函数 使用一个神经网络时&#xff0c;需要决定在隐藏层上使用哪种激活函数&#xff0c;哪种用在输出层节点上。到目前为止&#xff0c;只用过sigmoid激活函数&#xff0c;但是&#xff0c;有时其他的激活函数效果会更好。tanh函数…

图文深入理解TCP三次握手

前言 TCP三次握手和四次挥手是面试题的热门考点&#xff0c;它们分别对应TCP的连接和释放过程&#xff0c;今天我们先来认识一下TCP三次握手过程&#xff0c;以及是否可以使用“两报文握手”建立连接&#xff1f;。 1、TCP是什么&#xff1f; TCP是面向连接的协议&#xff0c;…

Asp.Net Core Web Api内存泄漏问题

背景 使用Asp.Net Core Web Api框架开发网站中使用到了tcp socket通信&#xff0c;网站作为服务端开始tcp server&#xff0c;其他的客户端不断高速给它传输信息时&#xff0c;tcp server中读取信息每次申请的byte[]没有得到及时的释放&#xff0c;导致内存浪费越来越多&#…

从cmd登录mysql

说明 先看看mysql.exe文件在哪个目录下&#xff0c;为了后面的操作方便&#xff0c;可以将该文件所在的路径增加到环境变量path中。 如果不增加到path环境变量中&#xff0c;那么在cmd窗口就要切换到mysql.exe文件所在的目录下执行。 在cmd窗口查看mysql命令的帮助信息 在cm…

vue中实现纯数字键盘

一、完整 代码展示 <template><div class"login"><div class"login-content"><img class"img" src"../../assets/image/loginPhone.png" /><el-card class"box-card"><div slot"hea…

【蓝桥杯软件赛 零基础备赛20周】第6周——栈

文章目录 1. 基本数据结构概述1.1 数据结构和算法的关系1.2 线性数据结构概述1.3 二叉树简介 2. 栈2.1 手写栈2.2 CSTL栈2.3 Java 栈2.4 Python栈 3 习题 1. 基本数据结构概述 很多计算机教材提到&#xff1a;程序 数据结构 算法。 “以数据结构为弓&#xff0c;以算法为箭”…

Linux shell中的函数定义、传参和调用

Linux shell中的函数定义、传参和调用&#xff1a; 函数定义语法&#xff1a; [ function ] functionName [()] { } 示例&#xff1a; #!/bin/bash# get limit if [ $# -eq 1 ] && [ $1 -gt 0 ]; thenlimit$1echo -e "\nINFO: input limit is $limit" e…

Python程序员入门指南:就业前景

文章目录 标题Python程序员入门指南&#xff1a;就业前景Python 就业数据Python的就业前景SWOT分析法Python 就业分析 标题 Python程序员入门指南&#xff1a;就业前景 Python是一种流行的编程语言&#xff0c;它具有简洁、易读和灵活的特点。Python可以用于多种领域&#xff…

Zabbix HA高可用集群搭建

Zabbix HA高可用集群搭建 Zabbix HA高可用集群搭建一、Zabbix 高可用集群&#xff08;Zabbix HA&#xff09;二、部署Zabbix高可用集群1、两个服务端配置1.1主节点 Zabbix Server 配置1.2 备节点 Zabbix Server 配置1.3 主备节点添加监控主机1.4 查看高可用集群状态 2、两个客户…

二、ZooKeeper集群搭建

目录 1、概述 2、安装 2.1 第一步&#xff1a;下载zookeeeper压缩包 2.2 第二步&#xff1a;解压 2.3 第三步&#xff1a;修改配置文件 2.4 第四步&#xff1a;添加myid配置 ​​​​​​​2.5 第五步&#xff1a;安装包分发并修改myid的值 ​​​​​​​2.6 第六步&a…