冒泡&二分&交换文字的位置

1、冒泡排序

	概念:
		就是将前面的一个数和后面的一个数进行比较。如果前面的大于后面的,那么就用一个盒子装一下其中一个数,从而实现互相交换位置。以此类推,一直将数据比较完为止。
	
	使用双重for循环实现:
		外层控制有多少数字要循环的次数,内层控制每次前后相比较的情况,内层一直要到后面的数比前面数大才停止
public static void main(String[] args) {

	 int[] arr={5,3,2,7,1,6,8,4,9};
	 
	 //外层循环整个数组有多少个数 
	 for (int j = 0; j <arr.length ; j++) {
	     //遍历的次数是比原数组的长度少一个的(不然判断的时候会造成索引越界的问题)
	     for (int i = 0; i <arr.length-1 ; i++) {
	         //如果遍历出来的这个数大于后面的数就将他们交换位置。如果不比前面的大,就不做事,进行下一次外层循环
	         if(arr[i]>arr[i+1]){ //比较前后两个数
	             //定义盒子
	             int temp=arr[i];
	             //将后面的数放到前面去
	             arr[i]=arr[i+1];
	             //在将前面的放到后面去
	             arr[i+1]=temp;
	         }
	     }
	 }

2、二分查找

注意:
	二分查找的前提是一组数据是有序排列的(从大到小或从小到大)。
概念:
	定义最大索引、最小索引、以及中间索引。
	将要查询的这个数和这组数据的中间索引做比较,如果大于中间索引就表示在中间索引这个位置的右边,那么就需要改变最小索引的位置,最大索引不变。如果这个数是在中间索引的左边,那么需要改变的就是最大索引,最小索引不变。如果最终这个数和中间索引相等,那么这个数的位置就等于中间索引的位置。每次循环都应该重新定义中间索引,因为每次循环完最大和最小索引总要变化一个。
public static void main(String[] args) {

        int[] i={1,2,3,4,5,6,7,8,9};
        int num=binSearch(i,1);
        System.out.println(num);

    }

    static int binSearch(int[] arr,int i){

        //最大索引; 相当于数组的最大长度-1 就是最大索引
        int maxIndex=arr.length-1;
        //最小索引
        int minIndex=0;
        //中间索引
        int halfIndex=(maxIndex+minIndex)/2;

        while (maxIndex>=minIndex){
            //当遍历的这个数等于中间索引,就表示要找的就是这个数
            if(arr[halfIndex]==i){
              return halfIndex;  //返回中间索引(等于这个数)
            }else if (arr[halfIndex]<i){  //中间索引的数要小于那个属的时候,表示就在中间索引的右边
                //变化的是最小索引 最大索引不变;这时候的最小索引就是上一次的中间索引+1
                minIndex=halfIndex+1;
            }else{//否则这个数就小于中间索引的数,就在中间索引的左边
                //变化的是最大索引; 这时的最大索引就是上一次的中间索引-1
                maxIndex=halfIndex-1;
            }
            //每次要进行下次循环的时候,中间索引都应该重新定位 (因为最大或最小索引至少要变化一个)
            halfIndex=(maxIndex+minIndex)/2;
        }
        return -1;//表示没找到; 如果查找的这个数不在这堆数据里面,就返回-1
    }

3、文字交换

public static void main(String[] args) {

	char[] arr = {'赵','兄','托','我','帮','你','办','点','事'};
	
	//将数据的一半进行循环
	for (int i=0;i<arr.length/2;i++){
	   //将第一个数放到盒子里面
	   char a = arr[i]; 
	   //把最后一个数和第一个数进行交换
	   arr[i] = arr[(arr.length-i)-1];
	   arr[(arr.length-i)-1] = a;
	}
    System.out.println(Arrays.toString(arr));   // 打印:*********
}        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值