数据结构之排序算法
来源:互联网 发布:ios11pp助手更新软件 编辑:程序博客网 时间:2024/05/19 22:00
在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的。即所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,则说这种排序算法是稳定的,反之,就是不稳定的。
稳定的排序
时间复杂度
空间复杂度
冒泡排序(bubble sort)
最差、平均都是O(n^2),最好是O(n)
1
插入排序(insertion sort)
最差、平均都是O(n^2),最好是O(n)
1
归并排序(merge sort)
最差、平均、最好都是O(n log n)
O(n)
桶排序(bucket sort)
O(n)
O(k)
基数排序(Radix sort)
O(dn)(d是常数)
O(n)
二叉树排序(Binary tree sort)
O(n log n)
O(n)
不稳定的排序
时间复杂度
空间复杂度
选择排序(selection sort)
最差、平均都是O(n^2)
1
希尔排序(shell sort)
O(n log n)
1
堆排序(heapsort)
最差、平均、最好都是O(n log n)
1
快速排序(quicksort)
平均是O(n log n),最差是O(n^2)
O(log n)
一、冒泡排序
二、插入排序
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5. 将新元素插入到下一位置中
6. 重复步骤2
三、归并排序
1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2、设定两个指针,最初位置分别为两个已经排序序列的起始位置
3、比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4、重复步骤3直到某一指针达到序列尾
5、将另一序列剩下的所有元素直接复制到合并序列尾
四、桶排序
在桶排序算法的代码中,假设输入是个含n个元素的数组A,且每个元素满足0≤ A[i]<1。另外还需要一个辅助数组B[O..n-1]来存放链表实现的桶,并假设可以用某种机制来维护这些表。
五、基数排序
(1)若关键字是十进制整数,则按个、十等位进行分解,基数rd=10,C0=0,C9=9,d为最长整数的位数.
(2)若关键字是小写的英文字符串,则rd=26,C0='a',C25='z',d为最长字符串的长度.
基数排序的基本思想是:从低位到高位依次对待排序的关键码进行分配和收集,经过d趟分配和收集,就可以得到一个有序序列.
六、二叉树排序
2、判断被插结点是其父亲结点的左、右儿子。将被插结点作为叶子结点插入。
3、若二叉树为空。则首先单独生成根结点。
PS:新插入的结点总是叶子结点。依次插入数据即完成建树。
1、如果结点z没有子女,则修改其父结点p[z],使NIL为其子女;
七、选择排序
八、希尔排序
九、堆排序
(1) ki≤K2i 且 ki≤K2i+1
1、先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区
2、再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key
3、由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的无序区R[1..n-2]和有序区R[n-1..n],且仍满足关系R[1..n-2].keys≤R[n-1..n].keys,同样要将R[1..n-2]调整为堆。
……
直到无序区只有一个元素为止。
伪码实现如下:
十、快速排序
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- java中判断字符串是否是一个整数(转载)
- 【圆的反演变换】hdu4773
- SUSE Linux 系统加固
- XML的三种解析方式优缺点比较
- ExtJs ComBox下拉树
- 数据结构之排序算法
- Linux下Eclipse创建快捷方式
- Math方法详细介绍
- 情窦初开的日子
- 第二周项目5-点结构体与枚举
- html结合qt混合ui交互架构
- XNA 整个屏幕及触控进行缩放
- EBS 开发添加弹性域到form中
- 关于Service中的耗时操作