日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java的数组查找算法_java数组、排序算法、查找算法详解

發(fā)布時間:2024/10/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的数组查找算法_java数组、排序算法、查找算法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、為什么定義數(shù)組要采用type[] arrayName;這種方式?

因為這種方式具有很好的可讀性,使用這種方式很容易就可以理解這是定義一個變量,其中變量名是arrayName,變量的類型是type[]。

2、定義數(shù)組是為什么不可以指定數(shù)組的長度?

我們知道數(shù)組是一種引用類型的變量,因此使用它來定義一個變量時,僅僅表示定義了一個引用變量(也就是定義了一個指針),這個引用變量還未指向任何有效內(nèi)存,因此定義數(shù)組時不能指定數(shù)組的長度。

因為定義數(shù)組只是定義了一個引用變量,并未指向任何有效的內(nèi)存空間,所以還沒有內(nèi)存空間來存儲數(shù)組元素,因此這個數(shù)組也不能使用,只有對數(shù)組進(jìn)行初始化之后才可以使用。

Arrays:針對數(shù)組進(jìn)行操作的工具類。屬于util包。沒有構(gòu)造方法。但是這個類的方法都是靜態(tài)方法,可以通過類直接調(diào)用

public static String toString(T[] a):把數(shù)組轉(zhuǎn)換成字符串

public static void sort(T[] a):對數(shù)組進(jìn)行排序(底層是快速排序)

public static int binarySearch(T[] a,Tkey):二分查找

public class ArrayDemo {

public static void main(String[] args) {

int[] arr = {24,69,80,57,13};

System.out.println(Arrays.toString(arr)); //[24, 69, 80, 57, 13]

System.out.println(Arrays.binarySearch(arr, 57)); //-2(為什么呢?看后面的源碼找答案)

Arrays.sort(arr);

System.out.println(Arrays.toString(arr)); //[13, 24, 57, 69, 80]

System.out.println(Arrays.binarySearch(arr, 57)); //2

}

}

為了更加深刻的了解這些方法的原理,下面貼出源碼以供理解:

這個是toString的源碼:只要是對象,我們在使用之前都要判斷是不是null,以防出現(xiàn)空指針異常

public static String toString(int[] a) {

if (a == null)

return "null";

int iMax = a.length - 1;

if (iMax == -1)

return "[]";

StringBuilder b = new StringBuilder();

b.append('[');

for (int i = 0; ; i++) {

b.append(a[i]);

if (i == iMax)

return b.append(']').toString();

b.append(", ");

}

}

binarySearch的源碼:

public static int binarySearch(int[] a, int key) {

return binarySearch0(a, 0, a.length, key);

}

private static int binarySearch0(int[] a, int fromIndex, int toIndex, int key) {

int low = fromIndex;

int high = toIndex - 1;

while (low <= high) {

int mid = (low + high) >>> 1;

int midVal = a[mid];

if (midVal < key)

low = mid + 1;

else if (midVal > key)

high = mid - 1;

else

return mid; // key found

}

return -(low + 1); // key not found.

}

冒泡排序

1、相鄰元素兩兩比較,大的往后面放。

2、第一次排序完畢后,最大值就出現(xiàn)在了最大索引處。

3、第二次排序,最后一個索引的位置就不需要比較了

4、第三次排序,倒數(shù)第二個索引位置就不需要比較了

用i來表示比較的次數(shù)。每一次都會從索引為0的位置開始向后比較。

第一輪:i = 1,j 的范圍是第一個到最后一個,所以j的索引范圍是[0,arr.length-1](arr.length-1是數(shù)組最后一個位置的索引,看成一個整體)

第一輪之后,會確定一個最大值。因此第二輪比較的時候就不用去比較這個最大值了。

第二輪:i = 2,因為第一輪已經(jīng)確定了一個最大值,有1個元素不會參與比較。因此第二輪 j 的索引范圍變成了[0,(arr.length-1)-1]

第二輪比較之后,會確定兩個應(yīng)該在數(shù)組末尾的兩個值。第三輪就不用去比較這兩個值了。

第三輪:i = 3,因為第二輪已經(jīng)確定了兩個大值了,有2個元素不會參與比較。因此第三輪 j 的索引范圍變成了[0,(arr.length-1)-2]

……..

依次類推:第 i 次 j 的索引范圍應(yīng)該是:[0,(arr.length-1)-(i-1)]

代碼如下:

public class BubbuleDemo {

public static void main(String[] args) {

int[] arr = { 24, 69, 80, 57, 13 };

bubbleSort(arr);

}

// 冒泡排序

public static void bubbleSort(int[] arr) {

for (int i = 1; i <= arr.length - 1; i++) { // 控制比較的次數(shù)。次數(shù) = 數(shù)組長度-1

for (int j = 0; j < (arr.length - 1) - (i - 1); j++) {

if (arr[j] > arr[j + 1]) {

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i] + " ");

}

}

}

選擇排序

1、從索引為0的地方開始,依次和后面的比較,小的往前放

2、第一次比較從0索引開始往后比較。第一次比較完畢后,最小的元素就出現(xiàn)在了第一個位置上。

3、第二次比較的時候就不比較第一個元素了,就會從第二個元素開始比較。也就是第二次比較從1索引開始比較。

第二次比較完畢后,第二小的就出現(xiàn)在了第二個位置上。

4、第三次比較的時候就不比較前兩個元素了,就會從第三個元素開始比較.也就是第三次比較從2索引開始比較。

…….

第 n 比較的時候就不比較前(n-1)個元素了,會從第n個元素開始比較。也就是第n次比較從(n-1)索引開始比較。

public class SelectSort {

public static void main(String[] args) {

int[] arr = { 24, 69, 80, 57, 13 };

selectSort(arr);

}

public static void selectSort(int[] arr) {

for (int i = 0; i <= (arr.length - 2); i++) { //已經(jīng)確認(rèn)好的值的個數(shù),比如:確定了0個人,就從0索引開始依次跟后面的比較

for (int j = i + 1; j <= (arr.length - 1); j++) {

if (arr[i] > arr[j]) {

int temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

}

}

}

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i] + " "); //13 24 57 69 80

}

}

}

二分查找(折半查找算法):數(shù)組元素有序的情況下

1、每次都去找中間的那個元素,跟要查找的元素比較,

2、如果中間元素的值 > 要查找的值,就在左半部分找

3、如果中間元素的值 < 要查找的值,就在右半部分找

注意:只有有序數(shù)組才可以使用這個方法。不可以對無序數(shù)組采用二分查找,不可以先排序再二分查找,因為你的數(shù)組元素都變了,你查找的索引已經(jīng)不再是原始數(shù)組的索引了。

public class BinarySearch {

public static void main(String[] args) {

int[] arr = { 11, 23, 34, 46, 57, 68, 79, 80 };

System.out.println(binarySearch(arr, 57)); //4

}

//二分查找

public static int binarySearch(int[] arr, int value) {

int min = 0;

int max = arr.length - 1;

int mid = (max + min) / 2;

while (min <= max) {

if (arr[mid] > value) {

max = mid - 1;

} else if (arr[mid] < value) {

min = mid + 1;

}else{

return mid;

}

mid = (max + min) / 2;

}

return -1; //找不到的情況

}

}

總結(jié)

以上是生活随笔為你收集整理的java的数组查找算法_java数组、排序算法、查找算法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 五月天丁香婷 | 9色视频在线观看 | 久久日精品 | 久久四虎| 操操操网 | 操操操操操操操操操操 | 日韩精品在线播放 | 日本xxxxxxxxx69| 激情文学8888| 加勒比hezyo黑人专区 | 中文字幕欧美一区 | 国产免费激情视频 | 欧美一区二区最爽乱淫视频免费看 | 波多野结衣影院 | 无码视频在线观看 | 天堂av官网 | 免费大片在线观看www | 日本啪啪网 | 丁香六月av | 欧美黄色短视频 | 一级片特黄 | 91一区二区三区四区 | 日韩电影一区二区 | 男生裸体视频网站 | 成人午夜视频精品一区 | 久久国产视频网 | 自拍偷拍三级 | 色婷婷一区二区三区 | 日韩中文字幕第一页 | 综合在线观看 | 精品久久久噜噜噜久久久 | 中文字幕亚洲精品 | 婷婷综合国产 | 老女人一毛片 | 亚洲插 | 亚洲免费在线观看av | av在线播放中文字幕 | 最新国产一区 | av日韩精品 | 91色多多 | 黄色在线观看免费视频 | 欧美天天性影院 | 夜夜爽天天干 | 玩偶姐姐在线看 | 操综合 | 香蕉视频在线视频 | 欧美精品一区二区三区四区 | 探花精品 | 91视频插插插 | 无码少妇一区二区三区芒果 | 亚洲影院在线 | aaa一级黄色片 | 成人免费做受小说 | 国产成人在线免费视频 | 亚洲性天堂 | 久久国产乱子伦免费精品 | 美色视频 | 久久mm | 一级二级三级黄色片 | 精品蜜桃一区二区三区 | 福利影院av | 国产精品久久久久三级无码 | 少妇精品导航 | 任你躁av一区二区三区 | 99久久99久久精品国产片果冰 | 日批在线观看视频 | 国产一区午夜 | 欧美日韩免费在线视频 | 亚洲av无码国产精品久久不卡 | 性久久久久久久久 | 国产农村妇女精品一区 | 亚洲视屏在线观看 | 国产男女无套 | 欧美精品一区二区免费 | 日日噜噜噜噜久久久精品毛片 | 九九热免费精品视频 | 涩久久| 欧美久久成人 | 国产美女一区二区三区 | 久久三级网 | av影院在线 | 久久99日 | 成年免费视频 | 99色99 | 成人黄色片视频 | 国精产品一区 | 少妇一区二区视频 | 免费男女乱淫真视频免费播放 | 特黄色大片 | 宿舍女女闺蜜调教羞辱 | 青青草原一区二区 | 国产熟妇乱xxxxx大屁股网 | 成人a免费 | 黄色片女人 | 天天插天天干天天操 | 爱情岛亚洲论坛入口 | 青草视频在线观看免费 | 午夜精品免费 | av小说在线|