Java语言-13:利用二分查找法和冒泡排序法以及选择排序法寻找一个未经过排列的数组元素索引

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

            

猜你喜欢

转载自blog.csdn.net/qq_41833394/article/details/80138605