Java数组操作

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;
			else
				return mid;
		
		}
		return -1;
	}
	
	

}

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中二分查找6arr2[4]=6

在数组arr2中用自己写的二分查找6arr2[4]=6

排序算法演示,原先数组元素arr

33 4  56 45 3  96 13 5  77 1 

冒泡排序

3  4  5  13 33 45 56 77 96

选择排序

3  4  5  13 33 45 56 77 96

快速排序

3  4  5  13 33 45 56 77 96

 







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值