Java數(shù)組高級算法與Arrays類常見操作小結【排序、查找】
本文實例講述了Java數(shù)組高級算法與Arrays類常見操作。分享給大家供大家參考,具體如下:
冒泡排序
冒泡排序原理

冒泡排序代碼:
package cn.itcast_01;
/*
* 數(shù)組排序之冒泡排序:
* 相鄰元素兩兩比較,大的往后放,第一次完畢,最大值出現(xiàn)在了最大索引處
*/
public class ArrayDemo {
public static void main(String[] args) {
// 定義一個數(shù)組
int[] arr = { 24, 69, 80, 57, 13 };
System.out.println("排序前:");
printArray(arr);
bubbleSort(arr);
System.out.println("排序后:");
printArray(arr);
}
//冒泡排序代碼
/*總共需要比較數(shù)組長度-1次,x < arr.length - 1
*每一次比較完,下一次就會減少一次元素的比較。第一次比較有0個元素不比,第二次有1個元素不比,,,,所以 y < arr.length - 1 - x
*兩兩比較,大的往后放
* */
public static void bubbleSort(int[] arr){
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - 1 - x; y++) {
if (arr[y] > arr[y + 1]) {
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
}
// 遍歷功能
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ", ");
}
}
System.out.println("]");
}
}
選擇排序
選擇排序原理圖

選擇排序代碼
package cn.itcast_02;
/*
* 數(shù)組排序之選擇排序:
* 從0索引開始,依次和后面元素比較,小的往前放,第一次完畢,最小值出現(xiàn)在了最小索引處
*/
public class ArrayDemo {
public static void main(String[] args) {
// 定義一個數(shù)組
int[] arr = { 24, 69, 80, 57, 13 };
System.out.println("排序前:");
printArray(arr);
//用方法改進
selectSort(arr);
System.out.println("排序后:");
printArray(arr);
}
/*
* 數(shù)組排序
* */
public static void selectSort(int[] arr){
for(int x=0; x<arr.length-1; x++){
for(int y=x+1; y<arr.length; y++){
if(arr[y] <arr[x]){
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
// 遍歷功能
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ", ");
}
}
System.out.println("]");
}
}
二分查找法
二分查找法原理

二分法的代碼實現(xiàn):
package cn.itcast_04;
/*
* 查找:
* 基本查找:數(shù)組元素無序(從頭找到尾)
* 二分查找(折半查找):數(shù)組元素有序
*
* 分析:
* A:定義最大索引,最小索引
* B:計算出中間索引
* C:拿中間索引的值和要查找的值進行比較
* 相等:就返回當前的中間索引
* 不相等:
* 大 左邊找
* 小 右邊找
* D:重新計算出中間索引
* 大 左邊找
* max = mid - 1;
* 小 右邊找
* min = mid + 1;
* E:回到B
*/
public class ArrayDemo {
public static void main(String[] args) {
//定義一個數(shù)組
int[] arr = {11,22,33,44,55,66,77};
//寫功能實現(xiàn)
int index = getIndex(arr, 33);
System.out.println("index:"+index);
//假如這個元素不存在后有什么現(xiàn)象呢?
index = getIndex(arr, 333);
System.out.println("index:"+index);
}
/*
* 兩個明確:
* 返回值類型:int
* 參數(shù)列表:int[] arr,int value
*/
public static int getIndex(int[] arr,int value){
//定義最大索引,最小索引
int max = arr.length -1;
int min = 0;
//計算出中間索引
int mid = (max +min)/2;
//拿中間索引的值和要查找的值進行比較
while(arr[mid] != value){
if(arr[mid]>value){
max = mid - 1;
}else if(arr[mid]<value){
min = mid + 1;
}
//加入判斷
if(min > max){
return -1;
}
mid = (max +min)/2;
}
return mid;
}
}
Arrays類
package cn.itcast_05;
import java.util.Arrays;
/*
* Arrays:針對數(shù)組進行操作的工具類。比如說排序和查找。
* 1:public static String toString(int[] a) 把數(shù)組轉成字符串
* 2:public static void sort(int[] a) 對數(shù)組進行排序
* 3:public static int binarySearch(int[] a,int key) 二分查找
*/
public class ArraysDemo {
public static void main(String[] args) {
// 定義一個數(shù)組
int[] arr = { 24, 69, 80, 57, 13 };
// public static String toString(int[] a) 把數(shù)組轉成字符串
System.out.println("排序前:" + Arrays.toString(arr));
// public static void sort(int[] a) 對數(shù)組進行排序
Arrays.sort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
// [13, 24, 57, 69, 80]
// public static int binarySearch(int[] a,int key) 二分查找
System.out.println("binarySearch:" + Arrays.binarySearch(arr, 57));
System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));
}
}
PS:這里再為大家推薦幾款相似的在線工具供大家參考:
在線動畫演示插入/選擇/冒泡/歸并/希爾/快速排序算法過程工具:
http://tools.jb51.net/aideddesign/paixu_ys
在線JS常見遍歷方式性能分析比較工具:
http://tools.jb51.net/aideddesign/js_bianli
更多關于java相關內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)組操作技巧總結》、《Java字符與字符串操作技巧總結》、《Java數(shù)學運算技巧總結》、《Java數(shù)據(jù)結構與算法教程》及《Java操作DOM節(jié)點技巧總結》
希望本文所述對大家java程序設計有所幫助。
相關文章
jdbc連SQL?server顯示1433端口連接失敗圖文解決方法
這篇文章主要給大家介紹了關于jdbc連SQL?server顯示1433端口連接失敗的圖文解決方法,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-06-06
Java8新特性之再見Permgen_動力節(jié)點Java學院整理
這篇文章主要介紹了Java8新特性之再見Permgen的相關知識,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧2017-06-06
Spring mvc JSON數(shù)據(jù)交換格式原理解析
這篇文章主要介紹了Spring mvc JSON數(shù)據(jù)交換格式原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03

