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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunriselzz 中级黑马   /  2013-6-26 22:29  /  1226 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. import java.util.Arrays;

  2. public class ArraysApp {

  3.         /**
  4.          * 数组常见操作小结
  5.          * 数组常见操作:
  6.                    A: 遍历: 普通for循环遍历  增强for循环遍历
  7.                 B: 获取最值: 获取最大值max  最小值min
  8.                 C: 排序: 选择排序  冒泡排序
  9.                 D: 查找: 顺序查找  拆装查找
  10.                    E: 反转:

  11.          * @param args
  12.          */
  13.         public static void main(String[] args) {
  14.                 //数组的定义及初始化
  15.                 int[] arr = new int[]{78,45,0,26,89,0,14,30,0,96,63,51};
  16.                 //增强for循环遍历数组
  17.                 printArr1(arr);       
  18.                 System.out.println(" 输出没有0元素的新数组: ");
  19.                 //普通for循环遍历数组
  20.                 printArr2(getNewArray(arr));
  21.                                
  22.                 //选择排序1
  23.                 selectSort1(arr);
  24.                 //选择排序性能的优化2
  25.                 selectSort2(arr);       
  26.                 //冒泡排序1
  27.                 bubbleSort1(arr);
  28.                 //冒泡排序1
  29.                 bubbleSort2(arr);       
  30.                 //调用数组工具类排序
  31.                 Arrays.sort(arr);               
  32.                 System.out.println(" 原数组排序后: ");
  33.                 //普通for循环遍历数组
  34.                 printArr2(arr);
  35.                
  36.                 //将数组中的元素作为字符串打印输出
  37.                 arrToString(arr);               
  38.                 System.out.println(" 原数组元素倒置后: ");
  39.                 //数组的反转1
  40.                 reverseArr1(arr);
  41.                 //数组的反转2
  42.                 reverseArr1(arr);
  43.                 //普通for循环遍历数组
  44.                 printArr2(arr);
  45.                 //数组的反转3
  46.                 reverseArr3(arr);
  47.                 printArr2(arr);
  48.                
  49.                 System.out.println("\n 查找数组中的某个元素: ");
  50.                 //顺序查找
  51.                 int index1 = getIndex(arr,63);
  52.                 findElement(index1);       
  53.                 //折半查找1
  54.                 int index3 = binarySearch(arr,63);
  55.                 findElement(index3);
  56.                 //折半查找2
  57.                 int index2 = halfSearch(arr,63);
  58.                 findElement(index2);
  59.                 //折半查找3
  60.                 int index4 = Arrays.binarySearch(arr, 77);
  61.                 //如果元素不存在,返回这个元素负的插入位置再-1
  62.                 findElement(index4);
  63.                
  64.                
  65.                 System.out.println("\n 查找数组中元素的最值: ");
  66.                 int maxValue1 = getMax1(arr);
  67.                 int maxValue2 = arr[getMax2(arr)];
  68.                 System.out.println(" 获取数组arr最大值1: "+maxValue1);
  69.                 System.out.println(" 获取数组arr最大值2: "+maxValue2);
  70.                
  71.                 int minValue1 = arr[getMin1(arr)];
  72.                 System.out.println(" 获取数组arr最小值1: "+minValue1);
  73.                 int minValue2 = getMin2(arr);
  74.                 System.out.println(" 获取数组arr最小值2: "+minValue2);
  75.                
  76.                 System.out.println(" 获取数组arr的平均值: "+getEverage(arr));
  77.                
  78.                
  79.         }
  80.        
  81.         //返回没有0元素的新数组
  82.         public static int[] getNewArray(int[] arr) {
  83.                 int len = getLen(arr);
  84.                 int[] newArr = new int[len];
  85.                 int index = 0;
  86.                 for (int i = 0; i < arr.length; i++) {
  87.                         if(0 != arr[i]){
  88.                                 newArr[index++] = arr[i];
  89.                         }
  90.                 }
  91.                 return newArr;
  92.         }

  93.         //获取除0元素外的新数组的长度
  94.         public static int getLen(int[] arr) {
  95.                 int newArrLen = 0;
  96.                 for (int i = 0; i < arr.length; i++) {
  97.                         if(0 != arr[i]){
  98.                                 newArrLen++;
  99.                         }
  100.                 }
  101.                 return newArrLen;
  102.         }

  103.         //数组元素的倒置输出3
  104.         public static void reverseArr3(int[] arr) {
  105.                 for (int i = 0,j=arr.length-1; i < arr.length; i++,j--) {
  106.                         swap(arr, i, j);
  107.                 }
  108.         }

  109.         //数组元素的倒置输出2
  110.         public static void reverseArr2(int[] arr) {
  111.                 for (int i = 0; i < arr.length/2; i++) {
  112.                         swap(arr, i, arr.length-1-i);
  113.                 }
  114.         }

  115.         //数组元素的倒置输出1
  116.         public static void reverseArr1(int[] arr) {
  117.                 System.out.print(" 数组元素的倒置输出: { ");
  118.                 for (int i = arr.length-1; i >= 0; i--) {
  119.                         if(i != 0)
  120.                                 System.out.print(arr[i]+",");
  121.                         else
  122.                                 System.out.println(arr[i]+" }");
  123.                 }
  124.         }

  125.         //将数组中的元素作为字符串打印输出
  126.         public static void arrToString(int[] arr) {
  127.                 System.out.print(" 作为字符串打印输出: \"");
  128.                 for (int i = 0; i < arr.length; i++) {
  129.                         System.out.print(""+arr[i]);
  130.                 }
  131.                 System.out.println("\"");
  132.         }

  133.         //对数组元素求平均值
  134.         public static double getEverage(int[] arr) {
  135.                 int sum = 0;
  136.                 int len = arr.length;
  137.                 double everage = 0.0;
  138.                 for (int i = 0; i < arr.length; i++) {
  139.                         sum += arr[i];
  140.                 }
  141.                 everage = (double)(sum)/len;
  142.                 return everage;
  143.         }

  144.         //折半查找1
  145.         public static int binarySearch(int[] arr, int key) {
  146.                 int min,max,mid;
  147.                 min = 0;
  148.                 max = arr.length-1;
  149.                 mid = (min+max)/2;
  150.                
  151.                 while(key != arr[mid]){
  152.                         if(key < arr[mid]){
  153.                                 max = mid - 1;
  154.                         }else{
  155.                                 min = mid + 1;
  156.                         }
  157.                        
  158.                         if(max < min){
  159.                                 return -1;
  160.                         }
  161.                         mid = (min+max)/2;
  162.                 }
  163.                 return mid;
  164.         }

  165.         //打印所要查找元素的结果
  166.         public static void findElement(int index){
  167.                 if(-1 != index){
  168.                         System.out.println(" 所要查找元素在数组中的下标为: "+index);
  169.                 }else{
  170.                         System.out.println(" 数组中不存在该元素! ");
  171.                 }
  172.         }
  173.        
  174.         //对排序后的元素进行折半查找的优化2
  175.         public static int halfSearch(int[] arr,int key) {
  176.                 int low = 0;
  177.                 int high = arr.length-1;
  178.                 int mid;
  179.                
  180.                 while(low <= high){
  181.                         mid = (low+high)>>1;
  182.                         if(key > arr[mid]){
  183.                                 low = mid + 1;
  184.                         }else if(key < arr[mid]){
  185.                                 high = mid - 1;
  186.                         }else{
  187.                                 return mid;
  188.                         }
  189.                 }
  190.                 return -1; //若返回min,则可以获得往这个有序的数组中新存入一个元素,
  191.                 //并依然保持这个数组有序的下标
  192.         }

  193.         //查找数组中的元素
  194.         public static int getIndex(int[] arr, int key) {
  195.                 for (int i = 0; i < arr.length; i++) {
  196.                         if(key == arr[i]){
  197.                                 return i;
  198.                         }
  199.                 }
  200.                 return -1;
  201.         }

  202.         //冒泡排序2
  203.         public static void bubbleSort2(int[] arr) {
  204.                 for(int i=arr.length-1;i>0;i--){
  205.                         for(int j=0;j<i;j++){
  206.                                 if(arr[j] > arr[j+1]){
  207.                                         swap(arr,j,j+1);
  208.                                 }
  209.                         }
  210.                 }
  211.                
  212.         }

  213.         //冒泡排序1
  214.         public static void bubbleSort1(int[] arr) {
  215.                 for (int i = 0; i < arr.length-1; i++) {
  216.                         for (int j = 0; j < arr.length-1-i; j++) {
  217.                                 if(arr[j] >arr[j+1]){
  218.                                         swap(arr,j,j+1);
  219.                                         /*
  220.                                         int temp = arr[j];
  221.                                                 arr[j] = arr[j+1];
  222.                                                 arr[j+1] = temp;
  223.                                         */
  224.                                 }
  225.                         }
  226.                 }
  227.         }

  228.         //选择排序1
  229.         public static void selectSort1(int[] arr) {
  230.                 for (int i = 0; i < arr.length-1; i++) {
  231.                         for (int j = i+1; j < arr.length; j++) {
  232.                                 if(arr[i] > arr[j]){
  233.                                         swap(arr, i, j);
  234.                                 }
  235.                         }
  236.                 }
  237.         }
  238.        
  239.         //选择排序性能的优化2
  240.         public static void selectSort2(int[] arr){
  241.                 for (int i = 0; i < arr.length-1; i++) {
  242.                         int num = arr[i];
  243.                         int index = i;
  244.                         for (int j = i+1; j < arr.length; j++) {
  245.                                 if(num > arr[j]){
  246.                                         num = arr[j];
  247.                                         index = j;
  248.                                 }
  249.                         }
  250.                         if(index != i)
  251.                                 swap(arr, i, index);
  252.                 }
  253.         }
  254.        
  255.         //交换数组中两元素的位置
  256.         public static void swap(int[] arr, int i, int j) {
  257.                 int temp = arr[i];
  258.                         arr[i] = arr[j];
  259.                         arr[j] = temp;
  260.         }

  261.         //通过比较数组元素,获取数组最大值
  262.         public static int getMax1(int[] arr) {
  263.                 int maxElement = arr[0];
  264.                 for (int i = 1; i < arr.length; i++) {
  265.                         if(maxElement < arr[i]){ //要得到最小值只要把'<'改成'>'
  266.                                 maxElement = arr[i];
  267.                         }
  268.                 }
  269.                 return maxElement;
  270.         }
  271.        
  272.         //通过比较数组元素,得到对应元素的下标,从而获取数组最大值
  273.         public static int getMax2(int[] arr) {
  274.                 int maxIndex = 0;
  275.                 for (int i = 1; i < arr.length; i++) {
  276.                         if(arr[maxIndex] < arr[i]){
  277.                                 maxIndex = i;
  278.                         }
  279.                 }
  280.                 return maxIndex;
  281.         }
  282.        
  283.         //通过比较数组元素,获取数组最小值
  284.         public static int getMin2(int[] arr) {
  285.                 int minElement = arr[0];
  286.                 for (int i = 1; i < arr.length; i++) {
  287.                         if(minElement > arr[i]){
  288.                                 minElement = arr[i];
  289.                         }
  290.                 }
  291.                 return minElement;
  292.         }
  293.        
  294.         //通过比较数组元素,得到对应元素的下标,从而获取数组最小值
  295.         public static int getMin1(int[] arr) {
  296.                 int minIndex = 0;
  297.                 for (int i = 1; i < arr.length; i++) {
  298.                         if(arr[minIndex] > arr[i]){ //要得到最大值下标,只要把'>'改成'<'
  299.                                 minIndex = i;
  300.                         }
  301.                 }
  302.                 return minIndex;
  303.         }
  304.        
  305.         //普通for循环遍历数组arr
  306.         public static void printArr2(int[] arr) {
  307.                 System.out.print(" 普通for循环遍历数组: { ");
  308.                 for (int i = 0; i < arr.length; i++) {
  309.                         if(i != arr.length-1){
  310.                                 System.out.print(arr[i]+",");
  311.                         }else{
  312.                                 System.out.println(arr[i]+" }");
  313.                         }
  314.                 }
  315.         }
  316.         //增强for循环遍历数组arr
  317.         public static void printArr1(int[] arr) {
  318.                 System.out.print(" 增强for循环遍历数组: { ");
  319.                 for(int x : arr){
  320.                         System.out.print(x+" ");
  321.                 }
  322.                 System.out.println("}");
  323.         }

  324. }
复制代码
在Java基础中,数组部分内容包含着较多的算法和应用.
本人这两天在学习这一块内容的时候稍加总结了一下以方便学习.
由于水平有限,有不对和不足的地方,欢迎指正,谢谢!

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
数组常见操作小结自行结果图

runresult.jpg (1.54 MB, 下载次数: 0)

runresult.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马