Java數(shù)組高級(jí)算法與Arrays類(lèi)常見(jiàn)操作小結(jié)【排序、查找】
本文實(shí)例講述了Java數(shù)組高級(jí)算法與Arrays類(lèi)常見(jiàn)操作。分享給大家供大家參考,具體如下:
冒泡排序
冒泡排序原理
冒泡排序代碼:
package cn.itcast_01; /* * 數(shù)組排序之冒泡排序: * 相鄰元素兩兩比較,大的往后放,第一次完畢,最大值出現(xiàn)在了最大索引處 */ public class ArrayDemo { public static void main(String[] args) { // 定義一個(gè)數(shù)組 int[] arr = { 24, 69, 80, 57, 13 }; System.out.println("排序前:"); printArray(arr); bubbleSort(arr); System.out.println("排序后:"); printArray(arr); } //冒泡排序代碼 /*總共需要比較數(shù)組長(zhǎng)度-1次,x < arr.length - 1 *每一次比較完,下一次就會(huì)減少一次元素的比較。第一次比較有0個(gè)元素不比,第二次有1個(gè)元素不比,,,,所以 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索引開(kāi)始,依次和后面元素比較,小的往前放,第一次完畢,最小值出現(xiàn)在了最小索引處 */ public class ArrayDemo { public static void main(String[] args) { // 定義一個(gè)數(shù)組 int[] arr = { 24, 69, 80, 57, 13 }; System.out.println("排序前:"); printArray(arr); //用方法改進(jìn) 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("]"); } }
二分查找法
二分查找法原理
二分法的代碼實(shí)現(xiàn):
package cn.itcast_04; /* * 查找: * 基本查找:數(shù)組元素?zé)o序(從頭找到尾) * 二分查找(折半查找):數(shù)組元素有序 * * 分析: * A:定義最大索引,最小索引 * B:計(jì)算出中間索引 * C:拿中間索引的值和要查找的值進(jìn)行比較 * 相等:就返回當(dāng)前的中間索引 * 不相等: * 大 左邊找 * 小 右邊找 * D:重新計(jì)算出中間索引 * 大 左邊找 * max = mid - 1; * 小 右邊找 * min = mid + 1; * E:回到B */ public class ArrayDemo { public static void main(String[] args) { //定義一個(gè)數(shù)組 int[] arr = {11,22,33,44,55,66,77}; //寫(xiě)功能實(shí)現(xiàn) int index = getIndex(arr, 33); System.out.println("index:"+index); //假如這個(gè)元素不存在后有什么現(xiàn)象呢? index = getIndex(arr, 333); System.out.println("index:"+index); } /* * 兩個(gè)明確: * 返回值類(lèi)型:int * 參數(shù)列表:int[] arr,int value */ public static int getIndex(int[] arr,int value){ //定義最大索引,最小索引 int max = arr.length -1; int min = 0; //計(jì)算出中間索引 int mid = (max +min)/2; //拿中間索引的值和要查找的值進(jìn)行比較 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類(lèi)
package cn.itcast_05; import java.util.Arrays; /* * Arrays:針對(duì)數(shù)組進(jìn)行操作的工具類(lèi)。比如說(shuō)排序和查找。 * 1:public static String toString(int[] a) 把數(shù)組轉(zhuǎn)成字符串 * 2:public static void sort(int[] a) 對(duì)數(shù)組進(jìn)行排序 * 3:public static int binarySearch(int[] a,int key) 二分查找 */ public class ArraysDemo { public static void main(String[] args) { // 定義一個(gè)數(shù)組 int[] arr = { 24, 69, 80, 57, 13 }; // public static String toString(int[] a) 把數(shù)組轉(zhuǎn)成字符串 System.out.println("排序前:" + Arrays.toString(arr)); // public static void sort(int[] a) 對(duì)數(shù)組進(jìn)行排序 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:這里再為大家推薦幾款相似的在線(xiàn)工具供大家參考:
在線(xiàn)動(dòng)畫(huà)演示插入/選擇/冒泡/歸并/希爾/快速排序算法過(guò)程工具:
http://tools.jb51.net/aideddesign/paixu_ys
在線(xiàn)JS常見(jiàn)遍歷方式性能分析比較工具:
http://tools.jb51.net/aideddesign/js_bianli
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java數(shù)組操作技巧總結(jié)》、《Java字符與字符串操作技巧總結(jié)》、《Java數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》及《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
SpringBoot項(xiàng)目中遇到的BUG問(wèn)題及解決方法
這篇文章主要介紹了SpringBoot項(xiàng)目中遇到的BUG問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Java Swing JPasswordField密碼框的實(shí)現(xiàn)示例
這篇文章主要介紹了Java Swing JPasswordField密碼框的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12淺談java如何實(shí)現(xiàn)Redis的LRU緩存機(jī)制
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著java如何實(shí)現(xiàn)Redis的LRU緩存機(jī)制展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解
生成隨機(jī)數(shù)是我們?nèi)粘i_(kāi)發(fā)經(jīng)常會(huì)遇到的一個(gè)功能,這篇文章主要給大家介紹了關(guān)于Java中生成隨機(jī)數(shù)的4種方式與區(qū)別、應(yīng)用場(chǎng)景的相關(guān)資料,4個(gè)方式分別是Random、ThreadLocalRandom、SecureRandom以及Math,需要的朋友可以參考下2021-06-06通過(guò)Java實(shí)現(xiàn)在Word中創(chuàng)建可填充表單
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Java代碼,以編程方式在Word中創(chuàng)建可填充表單,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-03-03Java簡(jiǎn)單實(shí)現(xiàn)農(nóng)夫過(guò)河問(wèn)題示例
這篇文章主要介紹了Java簡(jiǎn)單實(shí)現(xiàn)農(nóng)夫過(guò)河問(wèn)題,簡(jiǎn)單描述了農(nóng)夫過(guò)河問(wèn)題的概念、原理并結(jié)合簡(jiǎn)單實(shí)例形式分析了java解決農(nóng)夫過(guò)河問(wèn)題的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12Java學(xué)習(xí)-打印1-1000以?xún)?nèi)的水仙花數(shù)代碼實(shí)例
這篇文章主要介紹了Java打印1-1000以?xún)?nèi)的水仙花數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Spring:@Async注解和AsyncResult與CompletableFuture使用問(wèn)題
這篇文章主要介紹了Spring:@Async注解和AsyncResult與CompletableFuture使用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08