高级数组
二分查找:
查找指定元素在數組中的位置時,以前的方式是通過遍歷,逐個獲取每個元素,看是否是要查找的元素,這種方式當數組元素較多時,查找的效率很低,二分查找也叫折半查找,每次可以去掉一半的查找范圍,從而提高查找的效率。
查找流程:
代碼演示:
public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int num = 3;int index = testarr(arr, num);System.out.println(index);}private static int testarr(int[] arr, int num) {// 定義兩個變量,表示要查找的范圍。默認min = 0 ,max = 最大索引int min = 0;int max = arr.length - 1;// 循環查找,但是min <= maxwhile (min <= max) {// 計算出mid的值// 判斷mid位置的元素是否為要查找的元素,如果是直接返回對應索引int mid = (min + max) >> 1;if (arr[mid] > num) {// 如果要查找的值在mid的左半邊,那么min值不變,max = mid -1.繼續下次循環查找max = mid - 1;} else if (arr[mid] < num) {// 如果要查找的值在mid的右半邊,那么max值不變,min = mid + 1.繼續下次循環查找min = mid + 1;} else {// /mid指向的元素 == number直接返回return mid;}}//如果min大于了max就表示元素不存在,返回-1.return -1;}冒泡排序:
- 冒泡排序是一種排序的方式,對要進行排序的數據中相鄰的數據進行兩兩比較,將較大的數據放在右邊,依次對所有的數據進行操作,直至所有數據按要求完成排序。
- 如果有n個數據進行排序,總共需要比較n-1次,每一次比較完畢,下一次的比較就會少一個數據參與
快速排序:
- 冒泡排序算法中,一次循環結束,就相當于確定了當前的最大值,也能確定最大值在數組中應存入的位置
- 快速排序算法中,每一次遞歸時以第一個數為基準數,找到數組中所有比基準數小的,再找到所有比基準數大的,小的全部放左邊,大的全部放右邊,確定基準數的正確位置
- 在第一次遞歸結束后可以確定兩件事:
- 基準數歸位
- 基準數右邊都是比基準數大的,左邊都是比基準數小的,但是基準數左右兩邊的排序在第一次遞歸結束是沒有完成的
核心步驟:
從右開始找比基準數小的(基準數就是左邊第一個)
從左開始找比基準數大的
交換兩個值的位置
紅色繼續往左找,藍色繼續往右找,直到兩個箭頭指向同一個索引為止
基準數歸位
Arrays:
-
Arrays的常用方法
方法名說明 public static String toString(int[] a) 返回指定數組的內容的字符串表示形式 public static void sort(int[] a) 按照數字順序排列指定的數組,底層用的快速排序 public static int binarySearch(int[] a, int key) 利用二分查找返回指定元素的索引
代碼演示:
public static void main(String[] args) {// public static String toString(int[] a) 返回指定數組的內容的字符串表示形式int[] arr = {2, 4, 7, 5, 6, 1, 3};System.out.println(Arrays.toString(arr));// public static void sort(int[] a) 按照數字順序排列指定的數組int[] arr2 = {2, 4, 7, 5, 6, 1, 3};Arrays.sort(arr2);System.out.println(Arrays.toString(arr2));// public static int binarySearch(int[] a, int key) 利用二分查找返回指定元素的索引//1,數組必須有序// 2.如果要查找的元素存在,那么返回的是這個元素實際的索引// 3.如果要查找的元素不存在,那么返回的是 (負插入點‐1)// 插入點:如果這個元素在數組中,他應該在哪個索引上.int[] arr3 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int i = Arrays.binarySearch(arr3, 1);System.out.println(i);}總結
- 上一篇: asp连接oracle6,asp下用Or
- 下一篇: c语言 二维数组 文库,c语言二维数组练