1、二分查找法和冒泡排序法寻址
直接上程序:
package ArrayHalf;
/*需求:用二分查找法求一个未按顺序排序的数组的排序后的元素索引
* 分析:首先利用冒泡排序法将该数组排序
* 然后使用二分查找法调用经冒泡排序排好的数组
* 最后计算其索引并输出
*
* */
public class Combinemaopao {
public static void main(String[] args) {
// 定义一个未经过排序的数组
int[] arr = { 12, 21, 13, 54, 56, 34, 45 };
// 调用该排序方法
bubbleSort(arr);
// 调用打印方法
printArray(arr);
System.out.println(arr);
// 二分查找法
//调用search方法
int index = search(arr, 13) ;
System.out.println(index);
}
//二分查找
public static int search(int[] arr,int value) {
//定义索引
int min = 0;
int max = arr.length -1 ;
//计算中间索引
int mid = (min+max)/2 ;
while(arr[mid] !=value) {
if(arr[mid] > value) {
max = mid -1 ;
}else {
min = mid +1 ;
}
//找不到
if(min > max) {
return -1 ;
}
//重新计算中间索引
mid = (min+max)/2 ;
}
return mid ;
}
// 创建一个打印的方法
public static void printArray(int[] arr) {
// 对数组进行遍历
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
// 创建一个排序方法
public static void bubbleSort(int[] arr) {
// 对该数组进行排序
for (int i = 0; i < arr.length - 1; i++) {
// 定义内层排序
for (int j = 0; j < arr.length - 1 - i; j++) {
// 判断并进行排序
if (arr[j] > arr[j + 1]) {
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
}
}
输出结果为:12 13 21 34 45 54 56
1
2、二分查找法和选择排序法寻址
与冒泡排序法和二分查找法的方法类似:
直接上程序:
package ArrayHalf;
public class Combinechoose {
public static void main(String[] args) {
//定义数组元素
int[]arr1 = {13,1,35,46,98,22,32};
bubbleSort1(arr1);
System.out.print("该数组元素从小到大排序后为:[");
// 调用打印方法
printArray1(arr1);
// 二分查找法
//调用search方法
int index = search(arr1,35) ;
System.out.println(index);
}
//二分查找
public static int search(int[] arr1,int value) {
//定义索引
int min = 0;
int max = arr1.length -1 ;
//计算中间索引
int mid = (min+max)/2 ;
while(arr1[mid] !=value) {
if(arr1[mid] > value) {
max = mid -1 ;
}else {
min = mid +1 ;
}
//找不到
if(min > max) {
return -1 ;
}
//重新计算中间索引
mid = (min+max)/2 ;
}
return mid ;
}
// 创建一个打印方法
public static void printArray1(int[] arr1) {
// 遍历该数组
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + ",");// 打印该数组元素
}
System.out.println("]");
}
// 创建一个选择排序方法
public static void bubbleSort1(int[] arr1) {
// 规定循环次数(外层循环)
for (int i = 0; i < arr1.length - 1; i++) {
// 规定比较次数
for (int j = i + 1; j < arr1.length; j++) {
// 判断元素之间的大小并进行排序
if (arr1[i] > arr1[j]) {
// 定义中间变量对换arr1[i]和arr1[j]的索引位置
int temp = arr1[i];
arr1[i] = arr1[j];
arr1[j] = temp;
}
}
}
}
}
输出为:
该数组元素从小到大排序后为:[1,13,22,32,35,46,98,]
4