资源描述:
《Java实现的几个常用排序算法详细解读.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Java实现的几个常用排序算法详细解读2012-06-2715:33easense2009博客园 字号:T
2、 T排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排序算法。AD:2013云计算架构师峰会课程资料下载排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排序算法:1.选择排序选择排序的基本思想是遍历数组的过程中,以i代表当前需要排序的序号,则需要在剩余的[i…n-1]中找出其中的最小值,
3、然后将找到的最小值与i指向的值进行交换。因为每一趟确定元素的过程中都会有一个选择最大值的子流程,所以人们形象地称之为选择排序。举个实例来看看:1.初始: [38, 17, 16, 16, 7, 31, 39, 32, 2, 11] 2. 3.i = 0: [2 , 17, 16, 16, 7, 31, 39, 32, 38 , 11] (0th [38]<->8th [2]) 4. 5.i = 1: [2, 7 , 16, 16, 17 , 31, 39, 32, 38, 11] (1st [38]<->4th [17]) 6. 7.i = 2: [2, 7, 11
4、 , 16, 17, 31, 39, 32, 38, 16 ] (2nd [11]<->9th [16]) 8. 9.i = 3: [2, 7, 11, 16, 17, 31, 39, 32, 38, 16] ( 无需交换 ) 10. 11.i = 4: [2, 7, 11, 16, 16 , 31, 39, 32, 38, 17 ] (4th [17]<->9th [16]) 12. 13.i = 5: [2, 7, 11, 16, 16, 17 , 39, 32, 38, 31 ] (5th [31]<->9th [17]) 14. 15.i = 6: [2,
5、 7, 11, 16, 16, 17, 31 , 32, 38, 39 ] (6th [39]<->9th [31]) 1. 2.i = 7: [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 无需交换 ) 3. 4.i = 8: [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 无需交换 ) 5. 6.i = 9: [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 无需交换 ) 由例子可以看出,选择排序随着排序的进行(i逐渐增大),比较的次数会越来越少,但是不论数组初始
6、是否有序,选择排序都会从i至数组末尾进行一次选择比较,所以给定长度的数组,选择排序的比较次数是固定的:1+2+3+….+n=n*(n+1)/2,而交换的次数则跟初始数组的顺序有关,如果初始数组顺序为随机,则在最坏情况下,数组元素将会交换n次,最好的情况下则可能0次(数组本身即为有序)。由此可以推出,选择排序的时间复杂度和空间复杂度分别为O(n2)和O(1)(选择排序只需要一个额外空间用于数组元素交换)。实现代码:1./** 2. * Selection Sorting 3. */ 4.SELECTION(new Sortable() { 5. public 7、xtends Comparable> void sort(T[] array, boolean ascend) { 6. int len = array.length; 7. for (int i = 0; i < len; i++) { 8. int selected = i; 9. for (int j = i + 1; j < len; j++) { 10. int compare = array[j].compareTo(array[selected]);
8、11. if (compare != 0 && compare < 0 == ascend) { 12. selected = j; 13. } 14. } 15. 16. exchange(array, i, selected); 17. } 18. } 19.}) 2.插入排序插入排序的基本思想是在遍历数组的过程中,假设在序号i之前的元素即[0..i-1]都已经排