黑马程序员技术交流社区

标题: 刚敲完数组及算法的一些代码,分享一下自己昨天的“成... [打印本页]

作者: samge    时间: 2015-11-1 01:53
标题: 刚敲完数组及算法的一些代码,分享一下自己昨天的“成...
本帖最后由 samge 于 2015-11-1 02:26 编辑

[size=14.0000009536743px]

  1. class ArrayDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] a ={23,13,34,533,34,545,6,63,132,24};
  6.                 //排序前
  7.                 printArray(a);
  8.                 int max = getMax(a);
  9.                 int min = getMin(a);
  10.                 System.out.println("max="+max);
  11.                 System.out.println("min="+min);
  12.                 //选择排序;
  13.                 //selectSort(a);        //选择排序
  14.                 bubbleSort(a);                //冒泡排序
  15.                 //排序后
  16.                 printArray(a);
  17.                 System.out.println("max="+a[a.length-1]);
  18.                 System.out.println("min="+a[0]);
  19.         }       
  20.        
  21.         /*
  22.                 要求:定义一个功能,实现数组中的元素用逗号隔开输出

  23.         */
  24.         public static void printArray(int[] arr)
  25.         {
  26.                 System.out.print("{ ");
  27.                 for(int i=0;i<arr.length;i++)
  28.                 {
  29.                         if(i!=arr.length-1)
  30.                                 System.out.print(arr[i]+", ");
  31.                         else
  32.                                 System.out.println(arr[i]+" }");
  33.                        
  34.                 }
  35.         }

  36.         /*
  37.                 要求:定义一个求数组中最大的元素并输出。
  38.         */
  39.         public static int getMax(int[] arr)
  40.         {
  41.                 int max = 0;
  42.                 for(int i = 1;i<arr.length;i++)
  43.                 {
  44.                         //max为数组的下标
  45.                                 if(arr[i]>arr[max])
  46.                                 max = i;
  47.                 }
  48.                 return arr[max];
  49.         }

  50.         /*
  51.                 要求:定义一个求数组中最小的元素并输出。
  52.         */
  53.         public static int getMin(int[] arr)
  54.         {
  55.                 int min = 0;
  56.                 for(int i = 0;i<arr.length;i++)
  57.                 {
  58.                         if(arr[i]<arr[min])
  59.                                 min = i;
  60.                 }
  61.                 return arr[min];
  62.         }

  63.         /*
  64.                 选择排序
  65.         */
  66.         public static void selectSort(int[] arr)
  67.         {
  68.                 for(int i = 0;i<arr.length-1;i++)        //i<arr.length-1是为了在比完倒数第二个后,最后一个数不需要比较了
  69.                 {
  70.                         for(int j = i+1;j<arr.length;j++)       
  71.                         {
  72.                                 if(arr[i] > arr[j])
  73.                                 {
  74.                                         int temp = arr[i];
  75.                                         arr[i] = arr[j];
  76.                                         arr[j] = temp;
  77.                                 }
  78.                         }
  79.                 }
  80.         }

  81.         /*
  82.                 冒泡排序,这里是从左往右冒,首先将Max冒出
  83.         */
  84.         public static void bubbleSort(int[] arr)
  85.         {
  86.                 for(int i = 0;i<arr.length-1;i++)        //i<arr.length-1是为了在比完倒数第二个数后,最后一个数不需要比较了
  87.                 {
  88.                         //lengh-i是因为外围循环每执行一次便冒出一个最大值,所以剩余需要比较的元素需要减1;
  89.                         //-1是为了防止下面if判断中的【j+1】可能造成下标越界
  90.                         for(int j = 0;j<arr.length-i-1;j++)                                                   
  91.                         {
  92.                                 if(arr[j]>arr[j+1])
  93.                                 {
  94.                                         int temp = arr[j];
  95.                                         arr[j] = arr[j+1];
  96.                                         arr[j+1] = temp;
  97.                                 }
  98.                         }
  99.                 }
  100.         }
  101. }
复制代码





[size=14.0000009536743px]没办法,怎么就107行的代码就不能用用那个插入代码了???好奇怪 ,这是怎么回事??
好吧,不纠结了,昨天,10月31号自己看基础视频同时敲了一些代码,现在准备睡了,希望各位黑马的兄弟注意保重身体,晚安。










作者: axfybz1314    时间: 2015-11-1 02:02
好高深啊,看不懂
作者: a1441114    时间: 2015-11-1 11:57
System.out.print("{ ");
System.out.println(arr[i]+" }");//原视频里“{”是用的“[".

int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;//这替换应该还可以封装。简化代码。
作者: samge    时间: 2015-11-1 12:22
a1441114 发表于 2015-11-1 11:57
System.out.print("{ ");
System.out.println(arr+" }");//原视频里“{”是用的“[".

嗯,谢谢。按照你的提示,我已经将
  1. int temp = arr[j];
  2.           arr[j] = arr[j+1];
  3.           arr[j+1] = temp;
复制代码

这段代码整合为一个函数,函数如下:
  1.         /*
  2.                 写一个用于数组前后角标元素的置换功能
  3.         */
  4.         public static void exChange(int i,int j,int[] arr)
  5.         {
  6.                 int temp = arr[i];
  7.                 arr[i] = arr[j];
  8.                 arr[j] = temp;
  9.         }
复制代码


到时候上面函数如需用到相邻元素之间的置换的话,则可以这样调用了:
  1. if(arr[i] > arr[j])
  2.                                 {
  3.                                         exChange(i,j,arr);
  4.                                 }
复制代码

作者: dongran    时间: 2015-11-1 17:25
可以用sort方法直接排序
作者: qw9685    时间: 2015-11-1 17:53
还没学到这里 看不懂
作者: samge    时间: 2015-11-1 18:28
dongran 发表于 2015-11-1 17:25
可以用sort方法直接排序

嗯,是的,老师也说实际开发时是直接用函数实现,之所以要练习这些算法,一是为了了解算法的实现,二是为了到时面试时可能会被问到。至于第三点,是我个人认为的,多学点东西可以拓展自己知识面,总是好事~{:2_32:}
作者: samge    时间: 2015-11-1 18:30
qw9685 发表于 2015-11-1 17:53
还没学到这里 看不懂

刚开始按照毕老师的视频一边看一边敲代码,敲多几遍就熟悉了,加油
作者: ash午夜阳光    时间: 2015-11-1 23:00
samge 发表于 2015-11-1 18:28
嗯,是的,老师也说实际开发时是直接用函数实现,之所以要练习这些算法,一是为了了解算法的实现,二是为 ...

嗯,练练内功
作者: 小肥啾    时间: 2015-11-1 23:06
可以尝试把数组的所有方法封装一个单独的类,作为数组的工具类
作者: flybeifeng    时间: 2015-11-1 23:09
不错不错~
作者: samge    时间: 2015-11-1 23:58
小肥啾 发表于 2015-11-1 23:06
可以尝试把数组的所有方法封装一个单独的类,作为数组的工具类

嗯,多谢指点,现在学基础还没学到类,后面再做实现{:2_32:}




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