java初识之排序神操作

java初识之排序神操作

1.数组反转

解法:
1.第一个数和最后一个数换 依次换。。。。
  array[0] 和array[length -1 - 0]
  array[1] 和array[length -1 - 1]
  array[2] 和array[length -1 - 2]

2.一共操作length/2整数次,length为数值长度
代码如下:
    int a;//定义一个中间变量值a
    for (int i = 0; i < array.length / 2; i++) //因为要反转要经过array.length / 2次操作,所以循环array.length / 2次
    {
    //数值反转
    a = array[i];
    array[i] = array[array.length - 1 - i];
        array[array.length - 1 - i] = a;

    }

2.冒泡排序

解法
1.原理:相邻两个数进行比较 交换位置 最值放在数组的 最边缘 
2.一共操作n-1趟,每趟操作n-i-1次,n为数组数值个数,i为第几趟
代码解析:
int a;定义一个中间变量a
//      外循环相当于比较趟数
//      内循环相当于比较每一趟的次数
    for (int i = 0; i < arry.length - 1; i++) {
    for (int j = 0; j < arry.length - i - 1; j++) {
        if (arry[j] >= arry[j + 1]){
            //对比, 交换 
            a = arry[j];
            arry[j] = arry[j + 1];
            arry[j + 1] = a;                            
            } 
        }               
    }

3.选择排序

解法
1.原理:选择一个数 和依次和下一个数比较换位;
代码解析;
    int a;//定义中间变量
    for (int i = 0; i < array.length - 1; i++) //操作length-1趟
    {   
        for (int j = i + 1; j <array.length; j++)
        //每一趟操作的次数
        {
        if(array[i] <= array[j]) {
        比大小,大于第i个数则互换换位置
                    a = array[i];
                array[i] = array[j];
                array[j] = a;
        }
    }
}

折半查找法(可以提高效率的查找)

解法:
1.原理:不断的进行区间折半取范围值,直到确定目标值。
2.前提:数组中查找 查找这个数在数组中的角标(位置)。
3..注意:要在有序的数值中查找
代码解析:
        int[] array = new int[] {1,2,3,4,5,6,7,89,90};
        int max = array.length;//声明最大值
        int min = 0;//声明最小值
        int mid = (min + max) / 2;//声明中间值
        int key = 89;
        while (array[mid] != key) {
//          如果比中间角标大 挪动 小角标
//          如果比中间角标小 挪动大角标
            if (key < array[mid]) {
                max = mid - 1;
            } else if(key > array[mid]) {
               min = min + 1;
//             挪动完角标后 还要进行折半操作
               mid = (min + max) / 2;
               if (max < min) {
//              没有这个数
                   mid = -1;
                   break;
            }
            }       
        }System.out.println("这个数的角标是:"+ mid);

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值