Java数组算法 - 极悦

JavaSE教程_进阶

全部教程

×

Java数组算法

Java冒泡排序算法

package com.wkcto.chapter03.demo03;

import java.util.Arrays;

/**
 * 冒泡排序,
 * 	由小到大
 * 	从前向后两两比较,如果前面的数大于后面的数就交换
 * 	如果有n个数,需要比较n-1轮
 * @author 蛙课网
 *
 */
public class Test02 {

	public static void main(String[] args) {
		int [] data = {56,23,89,5,99,32};
		System.out.println( Arrays.toString(data));
		System.out.println("------------------------------");
		
		for( int x = 0 ; x < data.length - 1; x++){
			//第x轮, 把第x大的交换到最后
			for(int i = 0 ; i < data.length-1 - x ; i++){
				if ( data[i] > data[i+1] ) {
					int t = data[i];
					data[i] = data[i+1];
					data[i+1] = t;						
				}
				System.out.println( Arrays.toString(data));
			}
			System.out.println("------------------------------");
		}
		
	}

}

Java选择排序算法

package com.wkcto.chapter03.demo03;

import java.util.Arrays;
/**
 * 选择排序
 * 	由小到大
 * @author 蛙课网
 *
 */
public class Test04 {

	public static void main(String[] args) {
		int [] data = {56,23,89,5,99,32};
		System.out.println( Arrays.toString(data));
		System.out.println("------------------------------");
		
		for(int x = 0 ; x < data.length-1 ; x++){
			//1) 选择最小的,交换到x位置
			int min = x ; 		//保存最小元素的下标,假设x元素最小
			//找当前最小元素的下标
			for( int i = x+1 ;  i< data.length; i++){
				if (data[i] < data[min]) {
					min = i;
				}
			}
			//把当前最小元素交换到x位置
			if ( min != x ) {
				int t = data[x]	;
				data[x] = data[min];
				data[min] = t;
			}
			System.out.println( Arrays.toString(data));
		}
			
	}

}

Java二分查找算法

也叫折半查找算法

前提是数组已经由小到大排序, 在比较时,始终和中间的元素比较, 如果要查找的数比中间的数小, 说明在左一半; 如果要查找的数比中间的数大, 说明在右一半

● 要查找的元素就 是中间的元素

 

●  需要多次查找,才能找到元素

● 数组中不存在该元素

package com.wkcto.chapter03.demo03;
/**
 * 二分查找算法
 * 	
 * @author 蛙课网
 *
 */
public class Test05 {

	public static void main(String[] args) {
		int [] data = {5, 23, 32, 56, 89, 99};
		
		System.out.println( binarySearch(data, 5));
		System.out.println( binarySearch(data, 99));
		System.out.println( binarySearch(data, 23));
		System.out.println( binarySearch(data, 66));
		System.out.println( binarySearch(data, -88));
	}

	//定义方法, 实现二分查找
	//如果myarray数组中存在key元素,返回key元素在数组中的索引值, 如果不存在key元素返回-1
	public static int binarySearch(int [] myarray, int key) {
		int from = 0 ;
		int end = myarray.length-1;
		int mid = (from + end) /2;
		
		while( from <= end ){
			if ( myarray[mid] == key ) {
				return mid;
			}else if ( myarray[mid] < key) {  	//查找的元素比中间的数大, 在右一半
				from = mid + 1 ;
				mid = (from + end) /2;
			}else {								//查找的元素比中间的数小, 在左一半
				end = mid - 1;
				mid = (from + end) /2;
			}
		}
		
		return -1;
	}
}

总结:

掌握数组的定义

掌握数组的访问

掌握数组的遍历

掌握数组的静态初始化

掌握作为方法的返回值类型,方法的参数

了解main方法的参数

掌握可变长参数

掌握数组的扩容

理解数据的特点

掌握对象数组

掌握二维数组的定义, 元素的赋值, 及存储数据的遍历

掌握Arrays工具类的基本使用

在面试前掌握数组的相关算法

技术文档推荐

更多>>

视频教程推荐

更多>>