Chinaunix首页 | 论坛 | 博客
  • 博客访问: 211722
  • 博文数量: 43
  • 博客积分: 2501
  • 博客等级: 少校
  • 技术积分: 485
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 21:45
文章分类

全部博文(43)

文章存档

2011年(3)

2010年(1)

2009年(21)

2008年(18)

我的朋友

分类:

2008-08-20 22:25:22

一、通过插入进行排序
1.插入排序
    原理是通过元素找位置,实现简单,时间复杂度为O(n^2),空间复杂度为O(1)
2.希尔排序
    基于插入排序实现,根据TAOCP,当n<1000时选择间隔序列1,4,13,40,121,367性能比较好,时间复杂度接近O(n*lgn),空间复杂度为O(1)

二、通过交换进行排序
3.冒泡排序
    实现简单,时间复杂度为O(n^2),空间复杂度为O(1),经验表面它是这些算法中性能最差的
4.快速排序
    名副其实,性能好,时间复杂度为O(n*lgn),空间复杂度为O(1),但是在输入的所有元素很多相等或者递增排列时其时间复杂度变为O(n^2),它使用递归

三、通过选择进行排序
5.选择排序
    原理是通过位置找元素,实现简单,时间复杂度为O(n^2),空间复杂度为O(1)
6.堆排序
    实现复杂,通过最大堆实现递增排序,时间复杂度为O(n*lgn),空间复杂度为O(1)

四、通过合并进行排序
7.合并排序
    原理是合并两个已经排序的数组比直接对一个大数组排序简单,时间复杂度为O(n*lgn),空间复杂度为O(n),性能稳定,但需要使用大量的元素复制,通过优化代码可使空间复杂度降低至O(n),它使用递归

五、其他排序方法
8.分布计数排序
    只适合于小范围内的整数排序,性能相当好,其他方法没法比
阅读(1050) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~