您的位置:首页 > 编程语言 > Java开发

栋哥带你学Java数组排序和二分查找

2018-01-04 20:59 375 查看

数组的排序

一、冒泡排序

注意:只讲java中最常用的两种排序,不喜勿喷.
冒泡排序的核心思想:相连两个数进行比较 然后交换位置
int[] array = new int[]{3, 2, 5, 7, 1};
// 注意 内循环-1 防止数组越界
// 外循环 -1 代表 5个数 比较4趟 比较数组长度-1趟
// 内循环 -i 每一趟都少比一次
// 外循环相当于 比较多少趟
// 内循环相当于 一趟比多少次
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if(array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}


二、选择排序

选择排序的核心思想:选择一个数和下一个数比较换位(基本上都是默认数组的第一个数跟后面的数进行比较)
int[] array = new int[]{3, 2, 5, 7, 1};
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
int select = array[i];
if (select > array[j]) {
array[i] = array[j];
array[j] = select;
}
}
}


三、系统自带的排序和排序后的输出

这里介绍一下系统已经写好的排序方法
Arrays.sort(array);这里的array就是自己定义的数组名
要点:这个排序是升序的,上面介绍的冒泡和选择排序也是升序的,如果要降序的话就把if里面的 > 改成 <就行了.
给数组排完序后有输出的方法:
1.再遍历一次数组然后打印输出
代码如下:
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
2.用系统的已经写好的方法输出
System.out.println(Arrays.toString(array));


二、二分查找(折半查找)

前提:数组中查找 查找这个数在数组中的角标
注意: 在有序的数组中查找
优势:省时间
// 定义一个有序的一维数组
int[] array = new int[]{3, 6, 9, 12, 18, 22, 33};
// 数组最值下标
int min = 0;
// 数组最大下标
int max = array.length - 1;
// 中间值下标
int mid = (min + max) / 2;
// 要查找的值
int key = 12;
/*
* 循环查找
* array[mid] != key
*/
while (array[mid] != key) {
// 比较 如果比中间角标大 挪动最小下标
// 如果比中间角标小 挪动最大下标
if (key > array[mid]) {
min = mid + 1;
}else if (key < array[mid]) {
max = mid - 1;
}
// 挪动完下标后 还要进行折半操作
mid = (max + min) / 2;
// 当最大下标小于最小下标的时候 说明数组中没有这个数
if(max < min) {
// 进到这里说明没这个数 停止循环
mid = -1;
break;
}
}
System.out.println(mid);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息