Java冒泡排序算法
package com.wkcto.chapter03.demo03;
import java.util.Arrays;
/**
* 冒泡排序,
* 由小到大
* 從前向后兩兩比較,如果前面的數(shù)大于后面的數(shù)就交換
* 如果有n個數(shù),需要比較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二分查找算法
也叫折半查找算法
前提是數(shù)組已經由小到大排序, 在比較時,始終和中間的元素比較, 如果要查找的數(shù)比中間的數(shù)小, 說明在左一半; 如果要查找的數(shù)比中間的數(shù)大, 說明在右一半
● 要查找的元素就 是中間的元素
● 需要多次查找,才能找到元素
● 數(shù)組中不存在該元素
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));
}
//定義方法, 實現(xiàn)二分查找
//如果myarray數(shù)組中存在key元素,返回key元素在數(shù)組中的索引值, 如果不存在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) { //查找的元素比中間的數(shù)大, 在右一半
from = mid + 1 ;
mid = (from + end) /2;
}else { //查找的元素比中間的數(shù)小, 在左一半
end = mid - 1;
mid = (from + end) /2;
}
}
return -1;
}
}
總結:
掌握數(shù)組的定義
掌握數(shù)組的訪問
掌握數(shù)組的遍歷
掌握數(shù)組的靜態(tài)初始化
掌握作為方法的返回值類型,方法的參數(shù)
了解main方法的參數(shù)
掌握可變長參數(shù)
掌握數(shù)組的擴容
理解數(shù)據(jù)的特點
掌握對象數(shù)組
掌握二維數(shù)組的定義, 元素的賦值, 及存儲數(shù)據(jù)的遍歷
掌握Arrays工具類的基本使用
在面試前掌握數(shù)組的相關算法