数组与排序

  java内置对象果然强大。

 

  java中没有sizeof(),获取一个未知数组长度可以 数据名.length 直接得到了数组的长度。连字节转换都省了。

 

  数组静态方法类为Arrays,其中全部为静态方法视为工具类。其中有好多更爽的方法Arrays.toString(array)直接将一个数组换成字符串了。Arrays.sort(array)升序排序。爽就一个字我只说一次啊。

 

  立马实验一下,先来两个基本排序

 

选择排序:

	static void selectSort(int[] array){
		
		for (int i = 0; i < array.length - 1; i++) {
			
			for (int j = i + 1; j < array.length; j++) {
				
				if (array[i] > array[j]) {
					array[i] = array[i] ^ array[j];
					array[j] = array[i] ^ array[j];
					array[i] = array[i] ^ array[j];
				}
			}
		}
	}



冒泡排序:

	private static void bubbleSort(int[] array){
		
		for (int i = 0; i < array.length - 1; i++) {
			
			for (int j = 0; j < array.length - 1 - i; j++) {
				
				if (array[j] < array[j + 1]) {
					array[j] = array[j] ^ array[j + 1];
					array[j + 1] = array[j] ^ array[j + 1];
					array[j] = array[j] ^ array[j + 1];
				}
			}
		}
	}



有序数组折半插入法:

	private static int searchInsertIndex(int[] array, int insertKey){
		
		int mid = 0, start = 0, end = array.length - 1;
		
		while(end >= start){
			
			mid = (end + start)>>1;
			
			if (array[mid] > insertKey) {
				end = mid - 1;
			}
			else if(array[mid] < insertKey){
				start = mid + 1;
			}
			else {
				return mid;
			}
		}
		return start;
	}



  注:有必要提一点,java中创建对象数组和C++相比有一个非常容易忽视的问题。

 

  C++中可以直接使用默认构造函数,new出一个对象数组,如。 Object *pOb= new Object[5];返回的是五个连续Object类数组第一个字节的指针地址。

 

  而在java中。Object[] arrOb = new Object[5];返回的仅仅只是一个数组的引用,对象实例并没有真正被创建,后续须要arrOb[index] = new Object();一次次的将实例创建并用之前创建的数组中的每个元素引用指向它,好啰嗦。由此可以看出,C++中类数组实体是在一片连续的内存空间中,而Java中的类数组很可能在内存中的分配是东一个西一个。

 

  顺便分析了一下这种设计的原因,如果一个对象占用64个字节,那么5个对象就须要320个字节的空间,当创建一个5个该对象数组时,C++会去内存寻找一块不小于320字节的空间用来存放这5个对象。而Java只须要在可用内存空间中找出5块不小于64字节的位置,分别存放5个对象即可。这么做的好处是内存利用率增加,坏处是导致对数组逐元素操作时内存寻址速度减慢,严重影响程序执行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值