A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天下午闲的无聊,突然想起探究学过的排序方法的效率问题(冒泡、Arrays-sort、Collections-sort、选择、插入)我把关于输出的代码用斜杠注释了起来,如果想要获取他排序后的输出结果把注释取消即可,通过调整不同的样本数量,我发现他们的效率时间排名大概相似,下面我以样本数量为30000来展示一下我的运行结果,如果代码有不完善的地方或者还有别的排序方式可以比较的地方,欢迎大家指正,补充!!!
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collections;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Random;


  7. class ComMe
  8. {
  9. public static void main(String[]args)
  10. {

  11. int length=30000;//设置样本数量
  12. long ch;
  13. Number n=new Number(length);
  14. n.getRandom();
  15. System.out.println("第1种冒泡排序");
  16. comp(n,1,length);
  17. System.out.println("第2种Arrays-sort排序");
  18. comp(n,2,length);
  19. System.out.println("第3种Collections-sort排序");
  20. comp(n,3,length);
  21. System.out.println("第4种选择排序");
  22. comp(n,4,length);
  23. System.out.println("第5种插入排序");
  24. comp(n,5,length);
  25. System.out.println("第1种冒泡排序、第2种Arrays-sort排序、第3种Collections-sort排序、第4种选择排序、第5种插入排序");
  26. System.out.println();
  27. for(int i=1;i<6;i++)
  28. {
  29. System.out.println("第"+i+"种方法花费"+n.len[i]+"毫秒");
  30. }
  31. }

  32. public static void comp(Number n,int c,int l)
  33. {

  34. long start=System.currentTimeMillis();

  35. n.compare(c,l);
  36. System.out.println();
  37. long end=System.currentTimeMillis();
  38. n.setTime(end-start);
  39. if(c==3)
  40. {
  41. System.out.println();
  42. return;
  43. }

  44. /* for(int i=0;i<l;i++)
  45. {
  46. System.out.println(n.n[i]);
  47. }
  48. */



  49. }
  50. }

  51. class Number
  52. {
  53. public Integer[]n;
  54. private int l;
  55. public long[]len;
  56. private int t;
  57. Number(int l)
  58. {
  59. this.l=l;
  60. len=new long[6];
  61. t=1;
  62. }
  63. public void getRandom()//获取随机数
  64. {
  65. n=new Integer[l];
  66. Random r=new Random();
  67. for(int i=0;i<l;i++)
  68. {
  69. n[i]=r.nextInt(10000);

  70. }
  71. }

  72. public void compare(int choice,int l)//排序
  73. {
  74. if(choice==1)//冒泡排序
  75. {
  76. int temp;
  77. for(int i=0;i<l;i++)
  78. {
  79. for(int j=0;j<l-1;j++)
  80. {
  81. if(n[i]<n[j])
  82. {
  83. temp=n[i];
  84. n[i]=n[j];
  85. n[j]=temp;
  86. }
  87. }
  88. }
  89. }
  90. if(choice==2)//Arrays—sort排序
  91. {
  92. Arrays.sort(n);
  93. System.out.println();
  94. }

  95. if(choice==3)//Collections-sort排序
  96. {
  97. List list=new ArrayList();
  98. list=Arrays.asList(n);

  99. Collections.sort(list);
  100. //System.out.println(list.size());
  101. /* Iterator i=list.iterator();
  102. while(i.hasNext())
  103. {
  104. System.out.println(i.next());
  105. }
  106. */
  107. }

  108. if(choice==4)//选择排序
  109. {
  110. for(int i=0;i<n.length;i++)
  111. {
  112. int min=i;
  113. for(int j=i+1;j<n.length;j++)
  114. {
  115. if(min>n[j])
  116. min=n[j];
  117. }
  118. if(min!=i)
  119. {
  120. int temp=n[i];
  121. n[i]=n[min];
  122. n[min]=temp;
  123. }
  124. }

  125. }

  126. if(choice==5)//插入排序
  127. {
  128. for(int i=1;i<n.length;i++)
  129. {
  130. for(int j=i;j>0;j--)
  131. {
  132. if(n[j]<n[j-1])
  133. {
  134. int temp=n[j];
  135. n[j]=n[j-1];
  136. n[j-1]=temp;
  137. }
  138. else
  139. break;
  140. }
  141. }
  142. }


  143. }

  144. public void setTime(long time)
  145. {
  146. len[t]=time;
  147. t++;
  148. }


  149. }
复制代码

1.png (6.95 KB, 下载次数: 26)

Eclipse运行结果

Eclipse运行结果

2.jpg (22.58 KB, 下载次数: 38)

2.jpg

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 宫明星 于 2012-9-27 17:45 编辑

很有耐心啊,呵呵。
我来陪楼主,刚刚花了10分钟帮楼主代码排版了一下。
原版太乱了,眼都花了。
在这样看起来就舒服多了。
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collections;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Random;


  7. class ComMe
  8. {
  9.         public static void main(String[]args)
  10.         {

  11.                 int length=30000;//设置样本数量
  12.                 long ch;
  13.                 Number n=new Number(length);
  14.                 n.getRandom();
  15.                 System.out.println("第1种冒泡排序");
  16.                 comp(n,1,length);
  17.                 System.out.println("第2种Arrays-sort排序");
  18.                 comp(n,2,length);
  19.                 System.out.println("第3种Collections-sort排序");
  20.                 comp(n,3,length);
  21.                 System.out.println("第4种选择排序");
  22.                 comp(n,4,length);
  23.                 System.out.println("第5种插入排序");
  24.                 comp(n,5,length);
  25.                 System.out.println("第1种冒泡排序、第2种Arrays-sort排序、第3种Collections-sort排序、第4种选择排序、第5种插入排序");
  26.                 System.out.println();
  27.                 for(int i=1;i<6;i++)
  28.                 {
  29.                         System.out.println("第"+i+"种方法花费"+n.len[i]+"毫秒");
  30.                 }
  31.         }

  32.         public static void comp(Number n,int c,int l)
  33.         {

  34.                 long start=System.currentTimeMillis();

  35.                 n.compare(c,l);
  36.                 System.out.println();
  37.                 long end=System.currentTimeMillis();
  38.                 n.setTime(end-start);

  39.                 if(c==3)
  40.                 {
  41.                         System.out.println();
  42.                         return;
  43.                 }

  44.                 /* for(int i=0;i<l;i++)
  45.                 {
  46.                         System.out.println(n.n[i]);
  47.                 }
  48.                 */
  49.         }
  50. }

  51. class Number
  52. {
  53.         public Integer[]n;
  54.         private int l;
  55.         public long[]len;
  56.         private int t;

  57.         Number(int l)
  58.         {
  59.                 this.l=l;
  60.                 len=new long[6];
  61.                 t=1;
  62.         }
  63.         public void getRandom()//获取随机数
  64.         {
  65.                 n=new Integer[l];
  66.                 Random r=new Random();

  67.                 for(int i=0;i<l;i++)
  68.                 {
  69.                         n[i]=r.nextInt(10000);
  70.                 }
  71.         }

  72.         public void compare(int choice,int l)//排序
  73.         {
  74.                 if(choice==1)//冒泡排序
  75.                 {
  76.                         int temp;
  77.                         for(int i=0;i<l;i++)
  78.                         {
  79.                                 for(int j=0;j<l-1;j++)
  80.                                 {
  81.                                         if(n[i]<n[j])
  82.                                         {
  83.                                                 temp=n[i];
  84.                                                 n[i]=n[j];
  85.                                                 n[j]=temp;
  86.                                         }
  87.                                 }
  88.                         }
  89.                 }

  90.                 if(choice==2)//Arrays—sort排序
  91.                 {
  92.                         Arrays.sort(n);
  93.                         System.out.println();
  94.                 }

  95.                 if(choice==3)//Collections-sort排序
  96.                 {
  97.                         List list=new ArrayList();
  98.                         list=Arrays.asList(n);

  99.                         Collections.sort(list);
  100.                         //System.out.println(list.size());
  101.                         /* Iterator i=list.iterator();
  102.                         while(i.hasNext())
  103.                         {
  104.                                 System.out.println(i.next());
  105.                         }
  106.                         */
  107.                 }

  108.                 if(choice==4)//选择排序
  109.                 {
  110.                         for(int i=0;i<n.length;i++)
  111.                         {
  112.                                 int min=i;
  113.                                 for(int j=i+1;j<n.length;j++)
  114.                                 {
  115.                                         if(min>n[j])
  116.                                                 min=n[j];
  117.                                 }
  118.                                 if(min!=i)
  119.                                 {
  120.                                         int temp=n[i];
  121.                                         n[i]=n[min];
  122.                                         n[min]=temp;
  123.                                 }
  124.                         }
  125.                 }

  126.                 if(choice==5)//插入排序
  127.                 {
  128.                         for(int i=1;i<n.length;i++)
  129.                         {
  130.                                 for(int j=i;j>0;j--)
  131.                                 {
  132.                                         if(n[j]<n[j-1])
  133.                                         {
  134.                                                 int temp=n[j];
  135.                                                 n[j]=n[j-1];
  136.                                                 n[j-1]=temp;
  137.                                         }
  138.                                         else
  139.                                                 break;
  140.                                 }
  141.                         }
  142.                 }
  143.         }

  144.         public void setTime(long time)
  145.         {
  146.                 len[t]=time;
  147.                 t++;
  148.         }
  149. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
宫明星 发表于 2012-9-27 17:28
很有耐心啊,呵呵。
我来陪楼主,刚刚花了10分钟帮楼主代码排版了一下。
原版太乱了,眼都花了。

谢谢你啊。编辑器写的时候排版挺好的,一复制粘贴格式就乱了,刚才走的急没来得及排版
回复 使用道具 举报
本帖最后由 尤洋 于 2012-9-27 18:56 编辑

弱弱 的问一句
你写的那个 真的是冒泡排序么
if(choice==1)//冒泡排序
{
                 code;
}

}

}


回复 使用道具 举报
87.if(choice==1)//冒泡排序

88.{

89.int temp;

90.for(int i=0;i<l;i++)//楼主这儿是不是有点问题呀??

91.{

92.for(int j=0;j<l-1;j++)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马