- 排序的概念及其应用
- 常见的排序算法实现
- 排序算法的复杂度及稳定性分析
一、概念
排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
内部排序:数据元素全部放在内存中的排序。
外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。
应用
排序在很多领域都有广泛的应用,比如在数据处理中,可以将数据按照一定的规则进行排序,方便分析和查找;
二、种类
「交换排序」
〈1〉冒泡排序 BubbleSort
基本思想:从所传数据中首位开始遍历,每次比较两个数据,交换达到排序目的下面是实现代码
注意⚠️⚠️⚠️ 每一轮交换次数最多为 n-1。
空间复杂度 :O(1)
时间复杂度:O(n×n)
稳定性:稳定
〈2〉快速排序 QuivkSort
基本思想:前后指针法(代码思想简单)
下面是代码实现
时间复杂度: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]插入,原来位置上的元素顺序后移
代码实现
与打扑克是整理牌一样
时间复杂度:O(N^2)
空间复杂度:O(1)
稳定性:稳定
〈4〉希尔排序
与直接插入差不多,但是比直接插入效率高,所以思想与打扑克整理牌原理一样.就是将直接插入中的步长由一改 gap
时间复杂度:O(N^1.3)
空间复杂度:O(1)
它是一种不稳定的排序算法
〈5〉选择排序 SelectSort
基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完
在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换在剩余的array[i]--array[n-2](array[i+1]--array[n-1])集合。
代码实现:
时间复杂度:O(N^2)
空间复杂度:O(1)
它是一种不稳定的排序算法
总结:
以上是我对数据结构排序的见解和复习
我认为要提高排序算法的效率
1. 选择合适的算法:根据数据特点选择最适合的排序算法。
2. 优化数据结构:比如使用合适的数组或链表结构。
3. 减少不必要的比较和交换:尽量避免重复操作。
4. 利用并行计算:在多核或分布式环境中利用并行来加速排序。
5. 预处理数据:使数据更有利于排序。