【冒泡排序】和【二分查找】

 看了冒泡排序的原理和二分查找的原理,然后试着用代码实现,权当练手。

package binarysearchdemo;
import java.util.Scanner;
public class BinarySearch01 {
	public static void main(String[] args) {
		int[] str = {15,8,1,65,34,132,89,43,32,18};
		int a;
		int strMin=0,strMax=str.length,strCen=str.length/2;
		int lastDataMax,lastDataMin,lastDataCen;
		//冒泡排序:从小到大排序,从头开始,两两比较,把大的数往后放
		for(int x=(str.length)-1;x>0;x--){
			for(int i=0;i<x;i++){
				if(str[i] > str[i+1]){
					a = str[i];
					str[i] = str[i+1];
					str[i+1] = a;
				}
			}
		}
		//打印排序后的数组
		System.out.println("从小到大排序后的数组如下:");
		for(int b=0;b<str.length;b++){
			System.out.print(str[b]+" ");
		}
		System.out.println();
		//初始坐标存为历史记录
		lastDataMax = strMax;
		lastDataMin = strMin;
		lastDataCen = strCen;
		//用户输入需要查找的数字
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入要查找的数字:");
		int y = scan.nextInt();
		//二分查找
		while(y!=str[strCen]){
			if((strMax-strMin)==1){//数组中没有用户要找的数字
				break;
			}else if(y>str[strCen]){
				strMin = lastDataCen;
				strMax = lastDataMax;
				strCen = (strMin+strMax)/2;//计算新范围的中间值,用于比较并判断是否找到要查找的数,循环是否结束。
				lastDataCen = strCen;//当查找的数字比当前中间值大的时候,新范围的最大值不变,
				lastDataMin = strMin;//最小值和中间值变了,所以最后要重新记录最小和中间值。
			}else{
				strMin = lastDataMin;
				strMax = lastDataCen;
				strCen = (strMin+strMax)/2;//计算新范围的中间值,用于比较并判断是否找到要查找的数,循环是否结束。
				lastDataCen = strCen;//当查找的数字比当前中间值小的时候,新范围的最小值不变,
				lastDataMax = strMax;//最大值和中间值变了,所以最后要重新记录最小和中间值。
			}
		}
		if(y==str[strCen]){
			System.out.println("找到用户查找的数字,在数组中的位置为:str["+strCen+"]。");
		}
		else System.out.println("数组中没有用户查找的数字。");
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39516106/article/details/81144174