1 / 14
文档名称:

Java实现的几个常用排序算法详细解读.doc

格式:doc   大小:149KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Java实现的几个常用排序算法详细解读.doc

上传人:duzw466 2019/3/10 文件大小:149 KB

下载得到文件列表

Java实现的几个常用排序算法详细解读.doc

相关文档

文档介绍

文档介绍:Java实现的几个常用排序算法详细解读2012-06-2715:33easense2009博客园 字号:T | T排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排序算法。AD:2013云计算架构师峰会课程资料下载排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排序算法:,以i代表当前需要排序的序号,则需要在剩余的[i…n-1]中找出其中的最小值,然后将找到的最小值与i指向的值进行交换。因为每一趟确定元素的过程中都会有一个选择最大值的子流程,所以人们形象地称之为选择排序。举个实例来看看:初始: [38, 17, 16, 16, 7, 31, 39, 32, 2, 11]  i = 0:  [2 , 17, 16, 16, 7, 31, 39, 32, 38 , 11] (0th [38]<->8th [2])  i = 1:  [2, 7 , 16, 16, 17 , 31, 39, 32, 38, 11] (1st [38]<->4th [17])  i = 2:  [2, 7, 11 , 16, 17, 31, 39, 32, 38, 16 ] (2nd [11]<->9th [16])  i = 3:  [2, 7, 11, 16, 17, 31, 39, 32, 38, 16] ( 无需交换 )  i = 4:  [2, 7, 11, 16, 16 , 31, 39, 32, 38, 17 ] (4th [17]<->9th [16])  i = 5:  [2, 7, 11, 16, 16, 17 , 39, 32, 38, 31 ] (5th [31]<->9th [17])  i = 6:  [2, 7, 11, 16, 16, 17, 31 , 32, 38, 39 ] (6th [39]<->9th [31])  i = 7:  [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 无需交换 )  i = 8:  [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 无需交换 )  i = 9:  [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 无需交换 ) 由例子可以看出,选择排序随着排序的进行(i逐渐增大),比较的次数会越来越少,但是不论数组初始是否有序,选择排序都会从i至数组末尾进行一次选择比较,所以给定长度的数组,选择排序的比较次数是固定的:1+2+3+….+n=n*(n+1)/2,而交换的次数则跟初始数组的顺序有关,如果初始数组顺序为随机,则在最坏情况下,数组元素将会交换n次,最好的情况下则可能0次(数组本身即为有序)。由此可以推出,选择排序的时间复杂度和空间复杂度分别为O(n2)和O(1)(选择排序只需要一个额外空间用于数组元素交换)。实现代码:/**  * Selection Sorting  */ SELECTION(new Sortable() {     public <T parable<T>> void sort(T[] array, boolean ascend) {         int len = ;         for (int i = 0; i < len; i++) {             int selected = i;             for (int j = i + 1; j < len; j++) {                 pare = array[j].compareTo(array[selected]);                 if (compare != 0 && compare < 0 == ascend) {                     selected = j;                 }             }              exchange(array, i, selected);         }     } }) ,假设在序号i之前的元素即[0..i-1]都已经排好序,本趟需要找到i对应的元素x的正确位置k,并且在寻找这个位置k的过程中逐个将比较过的元素往后移一位,为元素x“腾位置”,最后将k对应的元素值赋为x,插入排序也是根据排序的特性来命名的。以下是一个实例,红色标记的数字为插入的数