常用排序算法分析与实现 - 图文

2019-05-17 19:18

? ? ? ?

常用排序算法分析与实现(一)(Java版)

插入排序

直接插入排序、希尔排序

? ?

选择排序

简单选择排序、堆排序

? ?

交换排序

冒泡排序、快速排序

? ? ? ?

归并排序

基数排序

排序基类 Java代码

1. package sort; 2.

3. import java.util.Arrays; 4. import java.util.Comparator; 5. import java.util.Random; 6. 7. /**

8. * 排序接口,所有的排序算法都要继承该抽象类,并且要求数组中的 9. * 元素要具有比较能力,即数组元素已实现了Comparable接口 10. *

11. * @author jzj

12. * @date 2009-12-5 13. *

14. * @param 15. */

16. public abstract class Sort> { 17.

18. public final Comparator DEFAULT_ORDER = new

DefaultComparator();

19. public final Comparator REVERSE_ORDER = new

ReverseComparator();

20. 21. /**

22. * 排序算法,需实现,对数组中指定的元素进行排序 23. * @param array 待排序数组 24. * @param from 从哪里 25. * @param end 排到哪里 26. * @param c 27. */

28. public abstract void sort(E[] array, int from, int end, Comparator c); 29. 30. /**

31. * 对数组中指定部分进行排序 32. * @param from 从哪里 33. * @param len 排到哪里 34. * @param array 待排序数组 35. * @param c 比较器 36. */

37. public void sort(int from, int len, E[] array, Comparator c) { 38. sort(array, 0, array.length - 1, c); 39. } 40. 41. /**

42. * 对整个数组进行排序,可以使用自己的排序比较器,也可使用该类

提供的两个比较器

43. * @param array 待排序数组

44. * @param c 比较器 45. */

46. public final void sort(E[] array, Comparator c) { 47. sort(0, array.length, array, c); 48. } 49. 50. /**

51. * 对整个数组进行排序,采用默认排序比较器 52. * @param array 待排序数组 53. */

54. public final void sort(E[] array) {

55. sort(0, array.length, array, this.DEFAULT_ORDER); 56. } 57.

58. //默认比较器(一般为升序,但是否真真是升序还得看E是怎样实现

Comparable接口的)

59. private class DefaultComparator implements Comparator { 60. public int compare(E o1, E o2) { 61. return o1.compareTo(o2); 62. } 63. } 64.

65. //反序比较器,排序刚好与默认比较器相反

66. private class ReverseComparator implements Comparator { 67. public int compare(E o1, E o2) { 68. return o2.compareTo(o1); 69. } 70. } 71. 72. /**

73. * 交换数组中的两个元素的位置 74. * @param array 待交换的数组 75. * @param i 第一个元素 76. * @param j 第二个元素 77. */

78. protected final void swap(E[] array, int i, int j) { 79. if (i != j) {//只有不是同一位置时才需交换 80. E tmp = array[i]; 81. array[i] = array[j]; 82. array[j] = tmp; 83. } 84. } 85. 86. /**

87. * 数组元素后移

88. * @param array 待移动的数组 89. * @param startIndex 从哪个开始移 90. * @param endIndex 到哪个元素止 91. */

92. protected final void move(E[] array, int startIndex, int endIndex) { 93. for (int i = endIndex; i >= startIndex; i--) { 94. array[i + 1] = array[i]; 95. } 96. } 97. 98. /**

99. * 以指定的步长将数组元素后移,步长指定每个元素间的间隔 100. * @param array 待排序数组 101. * @param startIndex 从哪里开始移 102. * @param endIndex 到哪个元素止 103. * @param step 步长 104. */

105. protected final void move(E[] array, int startIndex, int endIndex, int step)

{

106. for (int i = endIndex; i >= startIndex; i -= step) { 107. array[i + step] = array[i]; 108. } 109. } 110.

111. //测试方法

112. @SuppressWarnings(\

113. public static final > void testSort(Sort sorter, E[] array) { 114.

115. if (array == null) {

116. array = randomArray(); 117. }

118. //为了第二次排序,需拷贝一份

119. E[] tmpArr = (E[]) new Comparable[array.length]; 120. System.arraycopy(array, 0, tmpArr, 0, array.length); 121.

122. System.out.println(\源 - \ 123.

124. sorter.sort(array, sorter.REVERSE_ORDER); 125. System.out.println(\降 - \ 126.

127. sorter.sort(tmpArr, sorter.DEFAULT_ORDER); 128. System.out.println(\升 - \ 129. } 130.

131. //生成随机数组

132. @SuppressWarnings(\ 133. private static > E[] randomArray() {

134. Random r = new Random(System.currentTimeMillis()); 135. Integer[] a = new Integer[r.nextInt(30)]; 136. for (int i = 0; i < a.length; i++) {

137. a[i] = new Integer(r.nextInt(100)); 138. } 139. return (E[]) a; 140. } 141. }

插入排序

直接插入排序


常用排序算法分析与实现 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:1999年成人高考政治试题及答案(专升本)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: