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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hoop.zeng 中级黑马   /  2015-4-28 17:18  /  581 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚看完毕老师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. }
复制代码




7 个回复

倒序浏览
大神啊都学些算法了
回复 使用道具 举报
阔以的6666666
回复 使用道具 举报
不错,求大腿
回复 使用道具 举报
课本里就有个冒泡程序,课后练习也有个冒泡程序,已经干掉了!
回复 使用道具 举报
牛人,佩服。
回复 使用道具 举报
为来收藏了
回复 使用道具 举报
不明觉厉,专业支持
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马