ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:20.22KB ,
资源ID:7919040      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7919040.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(排序算法.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

排序算法.docx

1、排序算法1. importjava.util.Random; 2. /* 3. *排序测试类 4. *排序算法的分类如下:1.插入排序(直接插入排序、折半插入排序、希尔排序);2.交换排序(冒泡泡排序、快速排序); 5. *3.选择排序(直接选择排序、堆排序);4.归并排序;5.基数排序。 6. *关于排序方法的选择:(1)若n较小(如n50),可采用直接插入或直接选择排序。 7. *当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。 8. *(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜; 9. *(3)若

2、n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。 10. */ 11. /* 12. *descriptionJAVA排序汇总 13. */ 14. publicclassSortTest 15. /=产生随机数=/ 16. publicintcreateArray() 17. Randomrandom=newRandom(); 18. intarray=newint10; 19. for(inti=0;i10;i+) 20. arrayi=random.nextInt(100)-random.nextInt(100);/生成两个随机数相减,保证生成的数中有负

3、数 21. 22. System.out.println(=原始序列=); 23. printArray(array); 24. returnarray; 25. 26. publicvoidprintArray(intdata) 27. for(inti:data) 28. System.out.print(i+); 29. 30. System.out.println(); 31. 32. 33. /* 34. *description交换相邻两个数 35. *dateNov19,2009 36. *authorHDS 37. *paramdata 38. *paramx 39. *par

4、amy 40. */ 41. publicvoidswap(intdata,intx,inty) 42. inttemp=datax; 43. datax=datay; 44. datay=temp; 45. 46. 47. /* 48. *冒泡排序-交换排序的一种 49. *方法:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其他的数进行类似操作。 50. *性能:比较次数O(n2),n2/2;交换次数O(n2),n2/4 51. * 52. *paramdata 53. *要排序的数组 54. *paramsortType 55

5、. *排序类型 56. *return 57. */ 58. publicvoidbubbleSort(intdata,StringsortType) 59. if(sortType.equals(asc)/正排序,从小排到大 60. /比较的轮数 61. for(inti=1;idata.length;i+)/数组有多长,轮数就有多长 62. /将相邻两个数进行比较,较大的数往后冒泡 63. for(intj=0;jdataj+1) 65. /交换相邻两个数 66. swap(data,j,j+1); 67. 68. 69. 70. elseif(sortType.equals(desc)/

6、倒排序,从大排到小 71. /比较的轮数 72. for(inti=1;idata.length;i+) 73. /将相邻两个数进行比较,较大的数往后冒泡 74. for(intj=0;jdata.length-i;j+) 75. if(datajdataj+1) 76. /交换相邻两个数 77. swap(data,j,j+1); 78. 79. 80. 81. else 82. System.out.println(您输入的排序类型错误!); 83. 84. printArray(data);/输出冒泡排序后的数组值 85. 86. 87. /* 88. *直接选择排序法-选择排序的一种方

7、法:每一趟从待排序的数据元素中选出最小(或最大)的一个元素, 89. *顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。性能:比较次数O(n2),n2/2交换次数O(n),n 90. *交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CUP时间多,所以选择排序比冒泡排序快。 91. *但是N比较大时,比较所需的CPU时间占主要地位,所以这时的性能和冒泡排序差不太多,但毫无疑问肯定要快些。 92. */ 93. publicvoidselectSort(intdata,StringsortType) 94. if(sortType.endsWith(asc)/正排序,从小

8、排到大 95. intindex; 96. for(inti=1;idata.length;i+) 97. index=0; 98. for(intj=1;jdataindex) 100. index=j; 101. 102. 103. /交换在位置data.length-i和index(最大值)两个数 104. swap(data,data.length-i,index); 105. 106. elseif(sortType.equals(desc)/倒排序,从大排到小 107. intindex; 108. for(inti=1;idata.length;i+) 109. index=0;

9、 110. for(intj=1;j=data.length-i;j+) 111. if(datajdataindex) 112. index=j; 113. 114. 115. /交换在位置data.length-i和index(最大值)两个数 116. swap(data,data.length-i,index); 117. 118. else 119. System.out.println(您输入的排序类型错误!); 120. 121. printArray(data);/输出直接选择排序后的数组值 122. 123. /* 124. *插入排序方法:将一个记录插入到已排好序的有序表(有

10、可能是空表)中,从而得到一个新的记录数增1的有序表。性能:比较次数O(n2),n2/4 125. *复制次数O(n),n2/4比较次数是前两者的一般,而复制所需的CPU时间较交换少,所以性能上比冒泡排序提高一倍多,而比选择排序也要快。 126. * 127. *paramdata 128. *要排序的数组 129. *paramsortType 130. *排序类型 131. */ 132. publicvoidinsertSort(intdata,StringsortType) 133. if(sortType.equals(asc)/正排序,从小排到大 134. /比较的轮数 135. f

11、or(inti=1;idata.length;i+) 136. /保证前i+1个数排好序 137. for(intj=0;jdatai) 139. /交换在位置j和i两个数 140. swap(data,i,j); 141. 142. 143. 144. elseif(sortType.equals(desc)/倒排序,从大排到小 145. /比较的轮数 146. for(inti=1;idata.length;i+) 147. /保证前i+1个数排好序 148. for(intj=0;ji;j+) 149. if(datajdatai) 150. /交换在位置j和i两个数 151. swap

12、(data,i,j); 152. 153. 154. 155. else 156. System.out.println(您输入的排序类型错误!); 157. 158. printArray(data);/输出插入排序后的数组值 159. 160. /* 161. *反转数组的方法 162. */ 163. publicvoidreverse(intdata) 164. intlength=data.length; 165. inttemp=0;/临时变量 166. for(inti=0;ilength/2;i+) 167. temp=datai; 168. datai=datalength-

13、1-i; 169. datalength-1-i=temp; 170. 171. printArray(data);/输出到转后数组的值 172. 173. 174. /* 175. *快速排序快速排序使用分治法(Divideandconquer)策略来把一个序列(list)分为两个子序列(sub-lists)。步骤为: 176. *1.从数列中挑出一个元素,称为基准(pivot),2. 177. *重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。 178

14、. *3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。 179. *递回的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递回下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 180. *paramdata 181. *待排序的数组 182. *seeSortTest#qsort(int,int,int) 183. *seeSortTest#qsort_desc(int,int,int) 184. */ 185. publicvoidquickSort(intdata,Str

15、ingsortType) 186. if(sortType.equals(asc)/正排序,从小排到大 187. qsort_asc(data,0,data.length-1); 188. elseif(sortType.equals(desc)/倒排序,从大排到小 189. qsort_desc(data,0,data.length-1); 190. else 191. System.out.println(您输入的排序类型错误!); 192. 193. 194. 195. /* 196. *快速排序的具体实现,排正序 197. */ 198. privatevoidqsort_asc(in

16、tdata,intlow,inthigh) 199. inti,j,x; 200. if(lowhigh)/这个条件用来结束递归 201. i=low; 202. j=high; 203. x=datai; 204. while(ij) 205. while(ix) 206. j-;/从右向左找第一个小于x的数 207. 208. if(ij) 209. datai=dataj; 210. i+; 211. 212. while(ij&dataix) 213. i+;/从左向右找第一个大于x的数 214. 215. if(ij) 216. dataj=datai; 217. j-; 218.

17、219. 220. datai=x; 221. qsort_asc(data,low,i-1); 222. qsort_asc(data,i+1,high); 223. 224. 225. 226. /* 227. *快速排序的具体实现,排倒序 228. */ 229. privatevoidqsort_desc(intdata,intlow,inthigh) 230. inti,j,x; 231. if(lowhigh)/这个条件用来结束递归 232. i=low; 233. j=high; 234. x=datai; 235. while(ij) 236. while(ij&datajx) 237. j-;/从右向左找第一个小于x的数 238. 239. if(ij) 240. datai=dataj; 241. i+; 242. 243. while(ix) 244.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1