`
memewry
  • 浏览: 11557 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

几种常见的排序 Java版

 
阅读更多

一:冒泡排序

大学课程里面第一个排序算法,它的基本思想是每一个不断的遍历数组,每次遍历总是把最大的那个数找出来放到数组的尾部。经过n轮遍历之后,就排序完成。


二:插入排序

核心思想是:将一个数插入到一个有序表中,形成一个新的有序表


三:选择排序

核心思想是:遍历数组找出最大的那个数,然后插入到合适的正确的位置,这个跟冒泡很像


四:堆排序

这是所有排序中我觉得最复杂的一个,核心思想:其实也是找出最大值,然后也是插入到正确位置,只是找出最大值得办法是使用大顶堆,它的根就是最大值,然后与堆的最后一个节点交换,再进行向下堆调,成为一个新堆,这样重复,直到堆为空。

那么步骤是:1:建堆2:交换3:向下堆调


五:计数排序

核心思想:对于特定元素x来说,如果确定了序列中比其小的元素的个数。那么就能确定x的位置了,a数组中的数都为非负整数。如果有负数,则因该加上一个数,使其为正。

在这个程序中我们创建了两个大数组,一个用于计数,一个用于临时存储。


六:归并排序

归并排序使用了分治的思想,将一个大的排序分为若干个小的排序

归并排序分为自顶向下,自底向上的排序,当然我们熟知的是自顶向下

后者与前者的区别主要在于后者是合并的过程,而前者是划分的过程,前者与快速排序的思想很相像。下面来看一下它的实现过程。


七:快速排序

快速排序是一个也是典型的分治


八:希尔排序

先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。


九:基数排序

这个描述起来比较复杂,算是归纳法的一种吧。实现方式就是一下的,没有这么写注释,就是按照十进制位来排序,比如先第一位排序,然后按照第二位,直到最高位,需要比较大的空间开销。



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics