日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线黄色网页 | 美女久久久久久久 | 男人av网站 | 麻豆网址 | 99自拍偷拍视频 | 欧美嫩草影院 | 激情偷乱人成视频在线观看 | 亚洲v| 奇米影视av | 蜜臀网在线 | 久国产精品 | 婷婷综合社区 | 一卡二卡三卡四卡 | 少妇激情一区二区三区 | 懂色av蜜臀av粉嫩av分享吧最新章节 | 亲子乱aⅴ一区二区三区 | 九色国产在线 | 亚洲成人一二三 | 国产精品毛片久久久久久久av | 德国经典free性复古xxxx | 亚洲人成电影一区二区在线 | 免费在线你懂的 | 成人依人| 香蕉av网 | 亚洲成人动漫在线观看 | 久久久免费网站 | 久久久123| 五月天导航 | 99er在线观看 | 能免费看av的网站 | 无码人妻丰满熟妇精品 | 18岁免费观看电视连续剧 | 免费看国产片在线观看 | 男人的天堂免费 | 日本人做爰全过程 | 久久99国产精品久久99果冻传媒 | 亚洲婷婷一区 | 少妇高潮惨叫久久久久 | 色天天色综合 | 韩国禁欲系高级感电影 | 亚洲精品社区 | 曰本三级日本三级日本三级 | 国产精品香蕉国产 | 日韩av电影手机在线观看 | 精品一区二区三区免费毛片 | 国产精品女人和拘 | 99久久久久久久久 | 日韩欧美xxxx | 东北老女人av | 九九热精品免费视频 | 中文字幕在线国产 | 欧美日本国产在线 | 欧美午夜在线视频 | 一区二区久久精品66国产精品 | 伊人成长网 | 精品国产乱子伦一区二区 | 欧美人妻少妇一区二区三区 | 亚洲激情社区 | 久久久久三级 | 青青草超碰 | 91麻豆成人精品国产免费网站 | 一区二区三区日 | 色爱色| 国产成人亚洲精品 | 爱乃なみ加勒比在线播放 | 欧美综合网站 | 亚洲福利电影 | 亚洲 精品 综合 精品 自拍 | 久久作爱 | 黄网免费视频 | 欧美性狂猛xxxxxbbbbb | 青青草在线视频免费观看 | 久久人体视频 | 亚洲视频自拍 | 亚洲午夜小视频 | 肉丝美脚视频一区二区 | 聚色屋| 亚洲国产精品狼友在线观看 | 国产精品高清无码 | 伊人av网站 | 先锋影音资源av | 姑娘第5集在线观看免费 | 天堂аⅴ在线最新版在线 | 五月天婷婷在线播放 | 亚洲乱子伦| 四虎www | 香港三级日本三级 | 亚洲女人被黑人巨大进入 | 女性向小h片资源在线观看 日本天天操 | 成人激情视频网 | 夜夜嗨av一区二区三区 | 国产va在线 | 牛牛精品一区 | 久草电影在线 | 91操操| 欧美综合亚洲图片综合区 | 亚洲一区二区三区网站 | 色综合久久综合 | 精品免费在线 |