JavaSE教程_进阶
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工具类的基本使用
在面试前掌握数组的相关算法