排序(Sort)C 语言(初阶)

本文介绍了排序的基本概念,包括稳定性定义,以及内部排序和外部排序的区别。详细讲解了交换排序中的冒泡排序、快速排序、插入排序、希尔排序和选择排序,分析了它们的时间复杂度、空间复杂度和稳定性。最后提出提高排序效率的策略。
摘要由CSDN通过智能技术生成
  1. 排序的概念及其应用
  2. 常见的排序算法实现
  3. 排序算法的复杂度及稳定性分析

一、概念

       排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

       稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

       内部排序:数据元素全部放在内存中的排序。

       外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

    应用

        排序在很多领域都有广泛的应用,比如在数据处理中,可以将数据按照一定的规则进行排序,方便分析和查找;


二、种类

58b2b1d2d3894119952a7114cfbb361f.png

「交换排序」 

      〈1〉冒泡排序 BubbleSort

基本思想:从所传数据中首位开始遍历,每次比较两个数据,交换达到排序目的下面是实现代码

e053ebde8a86482285c232b8c5b4f9ff.png

 注意⚠️⚠️⚠️  每一轮交换次数最多为 n-1。

     空间复杂度 :O(1)  

     时间复杂度:O(n×n)

      稳定性:稳定

       〈2〉快速排序 QuivkSort

基本思想:前后指针法(代码思想简单)

5f90e44c2bc64b12bd64c0b28bb5d661.png

 下面是代码实现

91cfad4daabf4681999a7d8030df0c93.png

 时间复杂度:O(n log n)

 空间复杂度:O(log n)

稳定性:不稳定

 

「插入排序」

〈3〉直接插入排序 InsertSort

 基本思想:当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与 array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移

代码实现

与打扑克是整理牌一样

 

b7ef1d9d39b94cf8a8b2e353dc8dc948.png

时间复杂度:O(N^2) 

空间复杂度:O(1)

稳定性:稳定

〈4〉希尔排序

       与直接插入差不多,但是比直接插入效率高,所以思想与打扑克整理牌原理一样.就是将直接插入中的步长由一改 gap

c329ae49764a45389830006696d731dc.png

 69d04e7765a143df93a09ceed724eff5.png

231b25cc8cad4bb4b21dc136cea5d903.png

 

时间复杂度:O(N^1.3)

空间复杂度:O(1)

它是一种不稳定的排序算法 

〈5〉选择排序 SelectSort

基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 

在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换在剩余的array[i]--array[n-2](array[i+1]--array[n-1])集合。

代码实现:1858e50fa4384c9d9dcf272375266678.png

 f5d0494c673f46f1a75af20304852808.png

 时间复杂度:O(N^2)

空间复杂度:O(1)

它是一种不稳定的排序算法 

 


总结:

以上是我对数据结构排序的见解和复习

我认为要提高排序算法的效率

1. 选择合适的算法:根据数据特点选择最适合的排序算法。

2. 优化数据结构:比如使用合适的数组或链表结构。

3. 减少不必要的比较和交换:尽量避免重复操作。

4. 利用并行计算:在多核或分布式环境中利用并行来加速排序。

5. 预处理数据:使数据更有利于排序。

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值