黑马程序员技术交流社区

标题: 冒泡排序练习 [打印本页]

作者: hoop.zeng    时间: 2015-4-28 17:18
标题: 冒泡排序练习
刚看完毕老师java初级视频中的数组冒泡排序。提到了可以通过栈中建变量来记录要交换元素的序号,来减少堆中数组元素间的交换操作,以提高代码执行效率。自己尝试了一下,运行ok,以下是我的实现代码:

  1. class J3_1
  2. {
  3.         /*
  4.         需求:在冒泡排序中去除数组元素间多余的交换操作
  5.         思路:        以升序为例
  6.                         1,n维数组的冒泡排序要有n-1次冒泡
  7.                         2,每次冒泡中实际上只需要一次数组元素的交换
  8.                         3,定义变量记录每次冒泡中最大数的元素序号,比较完后做两个数的交换
  9.         */
  10.         public static void main(String[] args)
  11.         {
  12.                 int [] arr = {5,3,19,2,1,45,64,33};
  13.                 System.out.println("原数组:");
  14.                 arrPrint(arr);
  15.                 arrSort(arr);
  16.                 System.out.println("排序后数组:");
  17.                 arrPrint(arr);
  18.         }
  19.         //排序函数
  20.         public static void arrSort(int [] a)
  21.         {
  22.                 for(int i=0;i<a.length-1;i++)
  23.                 {
  24.                         //定义变量max记录每次冒泡最大值的序号,初值为0
  25.                         int max = 0;
  26.                         for(int j=1;j<a.length-i;j++)
  27.                         {
  28.                                 //依次将元素与最大值比较,若该元素比当前最大值大,将它的序号赋给max
  29.                                 if(a[max]<a[j])
  30.                                         max = j;
  31.                         }
  32.                         //定义变量k记录每次冒泡中的最后一个比较数的序号,若max!=k,则将这两个下标对应的元素交换
  33.                         int k = a.length-i-1;
  34.                         if(k != max)
  35.                         {
  36.                                 int temp = a[k];
  37.                                 a[k] = a[max];
  38.                                 a[max] = temp;
  39.                         }
  40.                 }
  41.         }
  42.         //定义一个功能,将数组遍历输出
  43.         public static void arrPrint(int[] a)
  44.         {
  45.                 for(int i = 0;i<a.length;i++)
  46.                 {
  47.                         if(i!=a.length-1)
  48.                                 System.out.print("a["+i+"]="+a[i]+',');
  49.                         else
  50.                                 System.out.println("a["+i+"]="+a[i]);
  51.                 }
  52.         }
  53. }
复制代码





作者: bboyXiaoNuo    时间: 2015-4-28 21:15
大神啊都学些算法了
作者: 罗韬    时间: 2015-4-28 21:39
阔以的6666666
作者: 牛仔很忙fire    时间: 2015-4-28 21:41
不错,求大腿
作者: 罗尖栋    时间: 2015-4-28 21:55
课本里就有个冒泡程序,课后练习也有个冒泡程序,已经干掉了!
作者: 19期1910    时间: 2015-4-28 21:57
牛人,佩服。
作者: 呆呆呆呆孔    时间: 2015-4-28 21:59
为来收藏了
作者: 374856298    时间: 2015-4-28 22:10
不明觉厉,专业支持




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2