package com.org.lxh;import java.util.Arrays;/*** 讲解Java数组* @author hemmingway <hemmingway@163.com>**/
public class ArrayDemo {/*** @param args*/@SuppressWarnings("unused") //元注释,忽略没有使用的变量public static void main(String[] args) {// TODO Auto-generated method stub//1.数组初始化//一维数组int arr1[] = new int[]{33, 4, 56, 45, 3, 96, 13, 5, 77, 1}; //后面用于排序测试int arr2[] = {1, 2, 4, 5, 6, 7, 10, 19, 20, 23, 27, 33, 41, 55};int arr3[] = new int[4];arr3[2] = 6;//输出数组,for循环遍历一维数组for(int i = 0; i<arr3.length; i++) //数组有length属性,数组长度System.out.print(arr3[i] + "\t");System.out.println(); //换行//for……each循环遍历数组String[] value = {"学校", "公司", "hnie.edu.cn", "clr.com"};//Arrays.sort(value);for(String item:value){System.out.print(item + "\t");}System.out.println();//二维数组int myarr[][] = new int[][]{{12, 0},{45, 23,36}};int myarr2[][] = {{12, 0},{45, 23, 40}};int myarr3[][] = new int[2][3];//2.使用Arrays类复制数组,java.util.Arrays类的使用System.out.println("遍历数组arr4,同时显示它最近的8的倍数是多少,一个小技巧。");int[] arr4 = Arrays.copyOfRange(arr2, 5, arr2.length);int num8;for(int i =0; i< arr4.length; i++){num8 = ( arr4[i] + 0x7)&~0x7; //技巧,把一个数升级到8的倍数System.out.print( arr4[i] + "->" + num8 + "\t");}System.out.println();//3.查找数组,二分查找Arrays.sort(arr2); //先要排序int index = Arrays.binarySearch(arr2, 6);System.out.println("在数组arr2中二分查找6:" + "arr2[" + index + "]=6");//测试自己写的二分查找index = binSearch(arr2, 6);System.out.println("在数组arr2中用自己写的二分查找6:" + "arr2[" + index + "]=6");//4.排序算法,常见的冒泡排序,选择排序,快速排序System.out.println("排序算法演示,原先数组元素arr是");printArr(arr1);//冒泡排序int[] arr = Arrays.copyOf(arr1, arr1.length);System.out.println("冒泡排序");for(int i=0; i<arr.length; i++){//比较相邻的两个元素,较大的数往后冒泡for(int j=arr.length -1; j > i; j--){if(arr[i] > arr[j]){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}printArr(arr);//选择排序arr = Arrays.copyOf(arr1, arr1.length); //数组复位System.out.println("选择排序");int idx;for(int i=0; i < arr.length; i++){idx = i;for(int j=i+1; j < arr.length; j++){if(arr[j] < arr[idx]){ //从数组后面查找较小的元素出来idx = j;}}//交换两个元素if(idx != i){int temp = arr[i];arr[i] = arr[idx];arr[idx] = temp;}}printArr(arr);//快速排序arr = Arrays.copyOf(arr1, arr1.length); //数组复位System.out.println("快速排序");quickSort(arr, 0, arr.length-1);printArr(arr);//}/*** 打印数组* @param arr*/private static void printArr(int[] arr){for(int i = 0; i<arr.length; i++)System.out.print(arr[i] + "\t");System.out.println(); //换行}/*** 快速排序算法* @param arr* @param loidx* @param hiidx*/public static void quickSort(int[] arr, int loidx, int hiidx){int lo = loidx;int hi = hiidx;int mid;if(hiidx > loidx){mid = arr[loidx + (hiidx -lo)/2]; //中间分界元素while(lo <= hi){while((lo<hiidx) && (arr[lo] < mid))++lo;while((hi > loidx) && (arr[hi] > mid))--hi;if(lo<=hi){swap(arr, lo, hi);++lo;--hi;}}}//if(loidx < hi)quickSort(arr, loidx, hi);if(lo < hiidx )quickSort(arr, lo, hiidx);}//end quickSort/*** * @param arr* @param i* @param j*/private static void swap(int[] arr, int i, int j){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}/*** 二分查找* @param arr* @param k* @return*/public static int binSearch(int[] arr, int k){//arr需要事先排序int lo = 0;int hi = arr.length-1;while(lo<=hi){int mid = lo + (hi -lo) / 2;if(k < arr[mid])hi = mid-1;else if(k > arr[mid])lo = mid +1;elsereturn mid;}return -1;}}
0 0 6 0
学校 公司 hnie.edu.cn clr.com
遍历数组arr4,同时显示它最近的8的倍数是多少,一个小技巧。
7->8 10->16 19->24 20->24 23->24 27->32 33->40 41->48 55->56
在数组arr2中二分查找6:arr2[4]=6
在数组arr2中用自己写的二分查找6:arr2[4]=6
排序算法演示,原先数组元素arr是
33 4 56 45 3 96 13 5 77 1
冒泡排序
1 3 4 5 13 33 45 56 77 96
选择排序
1 3 4 5 13 33 45 56 77 96
快速排序
1 3 4 5 13 33 45 56 77 96