排序算法(C实现)------- 总结
来源:互联网 发布:java string 添加元素 编辑:程序博客网 时间:2024/06/16 04:04
上面讨论的排序算法均是比较常用的,而且都属于内部排序,总结如下:
排序法
平均时间
最差情形
稳定度
额外空间
备注
冒泡
O(n2)
O(n2)
稳定
O(1)
n小时较好
直接插入
O(n2)
O(n2)
稳定
O(1)
大部分已排序时较好
希尔
O(nlogn)
O(ns) 1<s<2
不稳定
O(1)
s是所选分组
快速
O(nlogn)
O(n2)
不稳定
O(logn)
n大时较好
归并
O(nlogn)
O(nlogn)
稳定
O(n)
n大时较好
折半插入
O(n2)
O(n2)
稳定
O(1)
仅比插入排序减少了比较次数
简单选择
O(n2)
O(n2)
稳定
O(1)
n小时较好
堆
O(nlogn)
O(nlogn)
不稳定
O(1)
n大时较好
基数
O(d(n+rd))
O(d(n+rd))
稳定
O(rd)
多关键字排序(1 )从平均时间性能而言,快速排序最佳,所需时间最省,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。而后两者相比较的结果是,在n很大时,归并排序所需时间较堆排序省,但它所需辅助存储量最多。
(2 ) 上表中的冒泡排序,简单选择排序, 直接插入排序,折半插入排序,其中以直接插入排序为最简单,当序列中的记录“基本有序”或n值较小时,它是最佳的排序方法,因此常将它和其他方法,诸如快速排序,归并排序等结合在一起使用。
(3 )基数排序的时间复杂度也可以写成O(d*n)。因此,它最适用于n值很大而关键字较小的序列。若关键字也很大,而序列中大多数记录的“最高位关键字”均不同,则亦可先按“最高位关键字”不同将序列分成若干“小”的子序列,而后进行直接插入排序。
(4 )从方法的稳定性来比较,基数排序是稳定的内部排序方法,所有时间复杂度为O(n2)的简单排序法(包括除希尔排序外的所有插入排序,冒泡排序和简单选择排序)也是稳定的,然而,快速排序,堆排序和希尔排序 等时间性能较好的排序算法都是不稳定的。
综上所述,没有哪一种排序算法是绝对最优的,有的适用于n较大的情况,有的适用于n较小的情况,有的适用于多关键字的排序,有的.......,因此,在实际应用中需要根据不同情况适当选择相应的算法,甚至可将多种方法结合起来使用。
- 排序算法(C实现)------- 总结
- 几个基本排序算法总结( C语言实现 )
- 排序算法总结及实现(C语言版)
- linux c 实现八大排序算法总结
- 排序算法总结-C语言实现
- 排序算法总结-C语言实现
- 常见排序算法C/C++实现总结
- 排序算法 C语言实现 总结
- 排序算法总结(C++)
- 基本排序算法总结(C/C++)
- c排序算法总结
- c排序算法总结
- c排序算法总结
- c排序算法总结
- 排序算法总结(C++)
- 排序算法(C实现)------ 冒泡排序
- 排序算法(c实现)------- 插入排序
- 排序算法(C实现)------- 希尔排序
- 程序员水平分级 你属于哪一类?
- linux之路——CentOS 安装
- 微信公众平台开发教程(九)微信公众平台通用开发框架
- cocos2d-x入门基础知识
- 替换android系统通知声攻略
- 排序算法(C实现)------- 总结
- 剑指Offer:面试题19 二叉树的镜像
- 项目OA之资源结构图
- 花生壳ddns是什么
- 微信公众平台开发教程(十) 订阅号与服务号的区别
- 基于Storm的Nginx log实时监控系统
- 剑指Offer:面试题20 顺时针打印矩阵
- 内核 OOPS分析
- 剑指Offer:面试题21 包含min函数的栈