C#数据结构与算法4-C# 简单排序方法

news/2025/3/17 16:55:07/文章来源:https://www.cnblogs.com/firespeed/p/18503555

一 排序

排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题。例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困难。同样,存储在计算机中的数据的次序,对于处理这些数据的算法的速度和简便性而言,也具有非常深远的意义。

二 基本概念

排序是把一个记录(在排序中把数据元素称为记录)集合或序列重新排列成按记录的某个数据项值递增(或递减)的序列。
下表是一个学生成绩表,其中某个学生记录包括学号、姓名及计算机文化基础、C 语言、数据结构等课程的成绩和总成绩等数据项。在排序时,如果用总成绩来排序,则会得到一个有序序列;如果以数据结构成绩进行排序,则会得到另一个有序序列。

作为排序依据的数据项称为“排序项”,也称为记录的关键码(Keyword)。关键码分为主关键码(Primary Keyword)和次关键码(Secondary Keyword)。一般地,若关键码是主关键码,则对于任意待排序的序列,经排序后得到的结果是唯一的;若关键码是次关键码,排序的结果不一定唯一,这是因为待排序的序列中可能存在具有相同关键码值的记录。此时,这些记录在排序结果中,它们之间的位置关系与排序前不一定保持一致。如果使用某个排序方法对任意的记录序列按关键码进行排序,相同关键码值的记录之间的位置关系与排序前一致,则称此排序方法是稳定的;如果不一致,则称此排序方法是不稳定的。
由于待排序的记录的数量不同,使得排序过程中涉及的存储器不同,可将排序方法分为内部排序(Internal Sorting)和外部排序(External Sorting)两大类。
内部排序指的是在排序的整个过程中,记录全部存放在计算机的内存中,并且在内存中调整记录之间的相对位置,在此期间没有进行内、外存的数据交换。外部排序指的是在排序过程中,记录的主要部分存放在外存中,借助于内存逐步调整记录之间的相对位置。在这个过程中,需要不断地在内、外存之间交换数据。

三 直接插入排序

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

四 冒泡排序

冒泡排序(Bubble Sort)的基本思想是:将相邻的记录的关键码进行比较,若前面记录的关键码大于后面记录的关键码,则将它们交换,否则不交换。

五 简单选择排序

简单选择排序(Simple Select Sort)算法的基本思想是:从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第二个记录交换位置;如此重复,直到序列中只剩下一个记录为止。

 

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

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

相关文章

C#数据结构与算法5-C# 快速排序

一 快速排序 快速排序由于排序效率综合来说你几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影…

C#数据结构与算法4-C# 快速排序

一 快速排序 快速排序由于排序效率综合来说你几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影…

C#数据结构与算法1-C# 线性表

一 什么是线性表 线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这种一对一的关系指的是数据元素之间的位置关系,即:( 1)除第一个位置的数据元素外,其它数据元素位置的前面都…

C#数据结构与算法2-C# 栈和队列

一 栈和队列 栈和队列是非常重要的两种数据结构,在软件设计中应用很多。栈和队列也是线性结构,线性表、栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制。栈的操作只能在表的一端进行,队列的插入…

C# 托盘通知

一 托盘通知 NotifyIcon托盘通知:程序可以在通知区创建一个通知图标。一般地,可以提示一个气泡通知,右键菜单支持。准备:需要一个图标(*.ico),用于显示在通知区。如果没有ico格式,可以将png图片转成ico。 演示:在项目中添加托盘通知。① 设置文本Text;② 选择图标Icon; …

学习强化学习有哪些工具

强化学习是一种动态的学习方法,目前有许多工具可以帮助研究者和开发者入门和深入学习。主要工具包括:1、OpenAI Gym:一个用于开发和比较强化学习算法的工具包;2、TensorFlow Agents:一个基于TensorFlow的强化学习库;3、Stable Baselines:一个高质量的强化学习库。其中,…

在C语言中如何处理大型项目的模块化

### 在C语言中如何处理大型项目的模块化 在处理大型项目的模块化时,C语言中的关键策略包括使用函数库、分离编译、使用条件编译指令、以及采用模块化设计原则。其中,使用函数库是最直接有效的方法之一,允许开发者重用代码、减少重复工作,并保持代码的整洁和可管理性。 详细…

基类指针、虚纯虚函数、多态性、虚析构

多态 基类指针 // 父类指针可以 new 一个子类对象 Human *pman = new Man(); Human *pwman = new Wonan();抛出问题:父类指针没有办法调用子类的成员函数,那么你为什么还让父类指针 new 一个子类对象呢? 下面与虚函数搭配 虚函数(动态绑定) 我们只定义一个对象指针,就能…

SATA和NVMe SSD在速度上有多大差异

SATA和NVMe SSD在速度上的差异主要体现在:一、传输接口和带宽能力差异;二、读写速度的差异;三、应用场景和效率的差异;四、价格和市场趋势的差异;五、未来发展的差异。实际上,NVMe SSD在速度上远超SATA SSD,特别适合需要高速数据处理的应用场景,如高端游戏、视频编辑和…

Serverless技术栈推荐

# Serverless技术栈推荐 在探讨Serverless技术栈推荐时,我们首先要明确Serverless的核心优势:无需管理服务器、按需自动扩展、成本效益高、开发效率提高。其中,无需管理服务器是Serverless技术的标志性特征,它允许开发者专注于代码和业务逻辑的实现,而无需担心底层基础设施…

Java面试真题之中级进阶(线程,进程,序列化,IO流,NIO)

前言 本来想着给自己放松一下,刷刷博客,慕然回首,线程、程序、进程?Java 序列化?Java 中 IO 流? Java IO与 NIO的区别(补充)?似乎有点模糊了,那就大概看一下Java基础面试题吧。好记性不如烂键盘 *** 12万字的java面试题整理 *** 简述线程、程序、进程的基本概念。以及…