Python常用算法--排序算法【附源码】

应用具体python案例方式展示各种排序的要点,特别是希尔排序、插入排序、选择排序、冒泡排序、堆排序、快速排序、归并排序七个具体的排序算法。

一、希尔排序:

解释:希尔排序(Shell Sort)是一种插入排序的改进版本,也被称为缩小增量排序。希尔排序通过比较相距一定间隔的元素,将大间隔的元素逐步移动到正确的位置,从而实现了局部的排序,最终使整个数组基本有序。最后再进行一次常规的插入排序,以保证数组完全有序。

代码实现:本次实现了希尔排序,并在每次排序过程中打印了数组的状态。当 gap 为偶数时,我们将其减半,当 gap 为奇数时,我们将其设置为1以确保排序的完整性。具体代码如下:

def shell_sort(arr):
    n = len(arr)
    gap = n // 2

    while gap > 0:
        print(f"当前间隔为 {gap},进行插入排序:")
        for i in range(gap, n):
            temp = arr[i]
            j = i
            while j >= gap and arr[j - gap] > temp:
                arr[j] = arr[j - gap]
                j -= gap
            arr[j] = temp
            print(f"当前步骤: {arr}")  # 打印每一步排序后的数组
        print()  # 打印空行以分隔不同间隔的排序过程
        gap = gap // 2 if gap // 2 > 0 else (1 if gap == 1 else 0)

# 示例用法
arr = [12, 34, 54, 2, 3, 76, 8, 32, 15, 27]
print("初始数组:", arr)
print()
shell_sort(arr)
print("排序后的数组:", arr)

初始数组: [12, 34, 54, 2, 3, 76, 8, 32, 15, 27]

当前间隔为 5,进行插入排序:

当前步骤: [12, 34, 54, 2, 3, 76, 8, 32, 15, 27]

当前步骤: [12, 8, 54, 2, 3, 76, 34, 32, 15, 27]

当前步骤: [12, 8, 32, 2, 3, 76, 34, 54, 15, 27]

当前步骤: [12, 8, 32, 2, 3, 76, 34, 54, 15, 27]

当前步骤: [12, 8, 32, 2, 3, 76, 34, 54, 15, 27]

当前间隔为 2,进行插入排序:

当前步骤: [12, 8, 32, 2, 3, 76, 34, 54, 15, 27]

当前步骤: [12, 2, 32, 8, 3, 76, 34, 54, 15, 27]

当前步骤: [3, 2, 12, 8, 32, 76, 34, 54, 15, 27]

当前步骤: [3, 2, 12, 8, 32, 76, 34, 54, 15, 27]

当前步骤: [3, 2, 12, 8, 32, 76, 34, 54, 15, 27]

当前步骤: [3, 2, 12, 8, 32, 54, 34, 76, 15, 27]

当前步骤: [3, 2, 12, 8, 15, 54, 32, 76, 34, 27]

当前步骤: [3, 2, 12, 8, 15, 27, 32, 54, 34, 76]<

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xshell Mobaxterm等终端工具连接不上服务器,显示 SSH服务器拒绝密码。请再试一次。解决办法

问题解决办法&#xff1a; &#xff08;1&#xff09;需要查看配置SSH密钥时&#xff0c;输入的password密码和当前users_name cd /home/: 查看当前系统下的用户名 注意上图中的登录名是服务器端linux下自己设置的user_name用户名&#xff1a; 所以需要将fl改为&#xff1a…

CCIE-10-IPv6-TS

目录 实验条件网络拓朴 环境配置开始Troubleshooting问题1. R25和R22邻居关系没有建立问题2. 去往R25网络的下一跳地址不存在、不可用问题3. 去往目标网络的下一跳地址不存在、不可用 实验条件 网络拓朴 环境配置 在我的资源里可以下载&#xff08;就在这篇文章的开头也可以下…

Linux Shell:`xargs`命令

Linux Shell&#xff1a;xargs命令 在Linux Shell脚本或命令行操作中&#xff0c;xargs是一个非常有用的命令&#xff0c;它可以将标准输入&#xff08;stdin&#xff09;数据转换成命令行参数。xargs命令读取来自标准输入的数据&#xff0c;然后将这些数据作为参数传递给其他…

《Java面试自救指南》(专题三)数据库

文章目录 一条sql语句的查询流程有哪些数据库存储引擎&#xff0c;各自的区别数据库的三大范式事务的四大特性&#xff08;含隔离级别&#xff09;MySQL四种隔离机制的底层实现&#xff08;如何解决幻读 &#xff09;MySQL有哪几种锁&#xff0c;分别怎么实现数据库中有哪些索引…

Kubernetes学习笔记8

Kubernetes集群客户端工具kubectl 我们已经能够部署Kubernetes了&#xff0c;那么我们如何使用Kubernetes集群运行企业的应用程序呢&#xff1f;那么&#xff0c;我们就需要使用命令行工具kubectl。 学习目标&#xff1a; 了解kubectl 命令帮助方法 了解kubectl子命令使用分…

竞赛常考的知识点大总结(四)高级数据结构

并查集 并查集&#xff08;Disjoint Set Union&#xff0c;DSU&#xff09;是一种数据结构&#xff0c;用于管理一系列不相交的集合&#xff0c;并支持两种操作&#xff1a;合并&#xff08;Union&#xff09;和查找&#xff08;Find&#xff09;。并查集可以高效地处理动态连…

传统海外仓的管理模式有什么缺点?使用位像素海外仓系统的海外仓有什么优势?

传统的海外仓管理模式主要需要大量的人工操作和相对简单的信息化手段进行仓库的日常运营。因此&#xff0c;传统海外仓的运作比较依赖仓库员工的手工记录、核对和处理各种仓储和物流信息。 然而&#xff0c;传统海外仓管理模式通常存在一些缺点&#xff1a; 效率低下 因为需…

Docker-23.0.0版本 一键安装

一 前言 在数字化飞速发展的今天&#xff0c;应用程序的部署和管理成为每个企业和个人开发者不可忽视的课题。而Docker&#xff0c;作为一款开源的容器化技术&#xff0c;正以其独特的沙箱环境和逻辑隔离特性&#xff0c;引领着应用程序部署的新潮流。想象一下&#xff0c;每个…

算法之美:缓存数据淘汰算法分析及分解实现

在设计一个系统的时候&#xff0c;由于数据库的读取速度远小于内存的读取速度&#xff0c;那么为加快读取速度&#xff0c;需先将一部分数据加入到内存中&#xff08;该动作称为缓存&#xff09;&#xff0c;但是内存容量又是有限的&#xff0c;当缓存的数据大于内存容量时&…

《乡土中国》中国基层传统社会里的一种体系,支配着社会生活的各方面 - 三余书屋 3ysw.net

乡土中国 大家好&#xff0c;今天我们要解读的是费孝通先生的经典著作《乡土中国》。这本书的中文版大约有10万字&#xff0c;我将用30分钟左右的时间为你解读书中的精髓。为什么说中国的根基在于乡土社会&#xff1f;我们应该从哪些方面来理解乡土社会的特征及其重要性&#…

穿越雷区(Java--BFS解法)

穿越雷区&#xff08;Java–BFS解法&#xff09; 题目链接&#xff1a;http://oj.ecustacm.cn/problem.php?id1266 解题代码&#xff08;内含注释思路&#xff09; import java.util.*;public class Main {static int[][] dir {{0,1},{0,-1},{1,0},{-1,0}};static String[]…

Oracle备份和还原的几种方式

1、使用数据泵方式 exp demo/demoorcl buffer1024 filed&#xff1a;\back.dmp fully demo&#xff1a;用户名、密码 buffer: 缓存大小 file: 具体的备份文件地址 full: 是否导出全部文件 ignore: 忽略错误&#xff0c;如果表已经存在&#xff0c;则也是覆盖 exp demo/de…

JAVA 100道题(26)

26.编写一个JAVA程序&#xff0c;将文本文件中的内容读取到内存中并打印出来 以下是一个简单的Java程序&#xff0c;用于读取文本文件的内容并将其打印到控制台上&#xff1a; java复制代码 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOExce…

MyBatis与Hibernate的优缺点对比

MyBatis和Hibernate都是Java中常用的持久化框架&#xff0c;它们各自有着优点和缺点。让我们来对比一下它们的优缺点。 MyBatis 优点&#xff1a; SQL控制: MyBatis允许开发人员直接编写SQL语句&#xff0c;提供了更直观的数据库访问控制。灵活性: 开发人员可以更精细地控制…

LeetCode 856. 括号的分数

解题思路 栈模拟。 相关代码 class Solution {public int scoreOfParentheses(String s) {//stack中的值是左括号的的右边所有合法配对括号的值Stack<Integer> stack new Stack<>();stack.push(0);for(int i0;i<s.length();i)if(s.charAt(i) () stack.push…

nvm 安装多个版本的Node npm

先安装nvm 管理工具 git安装地址 找到安装包 下载然后安装 https://github.com/coreybutler/nvm-windows/releases/tag/1.1.11nvm常用命令 命令说明nvm version查看nvm版本nvm ls查看所有已经安装的Nodejs版本nvm list installed查看所有已经安装的Nodejs版本nvm ls availab…

第十一章 U-boot 顶层 Makefile 详解 (模块编译)

11.2.7 模块编译 在 uboot 中允许单独编译某个模块,使用命令" make Mdir"&#xff0c;旧语法"makeSUBDIRSdir"也是支持的。 200 # Use make Mdir to specify directory of external module to build 201 # Old syntax make ... SUBDIRS$PWD is still supp…

网站排名不升反降?揭秘SEO中常见的降权触发点!

在SEO(搜索引擎优化)中&#xff0c;网站的权重是影响其在搜索引擎中排名的重要因素。然而&#xff0c;有许多原因可能导致网站被降权&#xff0c;以下是一些常见的原因&#xff1a; 1. 网站内容过于雷同或不相关性&#xff1a;如果网站的内容大量复制自其他网站&#xff0c;或…

笔试:4.6美团笔试(硬件开发方向)

二十道选择两道算法题。 选择就不说了&#xff0c;硬件方面目前了解较少。 两道算法题都过了&#xff0c;第一题很简单没有什么好讲的。 第二题看着题目以为会很复杂&#xff0c;没想到一遍过。 小美有一个由 n 个互不相等的正整数构成的数组 a&#xff0c;但她一不小心把 a…

Three 之 three.js (webgl)GLSL-Card 中文手册相关知识

Three 之 three.js &#xff08;webgl&#xff09;GLSL-Card 中文手册相关知识 目录 Three 之 three.js &#xff08;webgl&#xff09;GLSL-Card 中文手册相关知识 一、简单介绍 二、GLSL 中文手册 1、基本类型 2、基本结构和数组 3、向量的分量访问 4、运算符 5、基础…