JAVA常见排序算法总结

来源:互联网 发布:直销双轨软件 编辑:程序博客网 时间:2024/05/22 05:34

排序算法有很多种,常见的如冒泡排序,快速排序,选择排序,插入排序,归并排序,希尔排序等等,下面就简单介绍一些这些排序。

排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。

内排序有可以分为以下几类:
(1)、插入排序:直接插入排序、二分法插入排序、希尔排序。
(2)、选择排序:简单选择排序、堆排序。
(3)、交换排序:冒泡排序、快速排序。
(4)、归并排序
(5)、基数排序

1.冒泡排序
这个应该是相对来说接触的最多,所以相对也比较熟悉了。
原理:逐次比较两个相邻数据的大小并交换位置来完成对数据排序,每次比较的结果都找出了这次比较中数据的最大项,因为是逐次比较,所以效率是O(N^2)的。
要点:设计交换判断条件,提前结束以排好序的序列循环。

2.快速排序
原理:快速排序是一种广泛使用的排序方法,效率可以达到O(NlogN),快速排序的原理是确定一个中间值pivot,将所有小于pivot的数据放在左侧,大于pivot的值放在右侧,之后再对左右两侧分别采取这种策略进行排序,直到这个过程结束。
要点:递归、分治

3.选择排序
原理:将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个。

4.希尔排序
原理:Shell首先将间隔设定为n/2,然后跳跃进行插入排序,再来将间隔n/4,跳跃进行排序动作,再来间隔设定为n/8、n/16,直到间隔为1之后的最后一次排序终止,由于上一次的排序动作都会将固定间隔内的元素排序好,所以当间隔越来越小时,某些元素位于正确位置的机率越高,因此最后几次的排序动作将可以大幅减低。

5.插入排序
原理:像是玩朴克一样,我们将牌分作两堆,每次从后面一堆的牌抽出最前端的牌,然后插入前面一堆牌的适当位置

6.归并排序
原理:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

像其他的排序算法还有很多很多种,大概记住几种应该就可以了,然后大致了解一下它们的基本原理,本来想列举这些例子的,之后有时间再来写吧,大家可以参考下面的网址,这里面有了很多详细的说明,也有很多值得一看的例子。

参考:

http://blog.csdn.net/zgrjkflmkyc/article/details/11639091

http://www.cnblogs.com/liuling/p/2013-7-24-01.html

http://www.2cto.com/kf/201109/104886.html

http://blog.csdn.net/cold702/article/details/7979332

http://blog.csdn.net/yexinghai/article/details/4649923

http://wenku.baidu.com/link?url=bPqX3g6ejK58fpUCt0gNkU7S54wEgiVPnYU8xjmXx26t5p4Yyop8cvqHA6nrVAPUZgzRD6CQAUcbzW_gkCK_WEPZLZqe55-z8flLZNo63C7

0 0
原创粉丝点击