二分排序的问题
1.中间数的确认取上位中位数还是下位中位数
数组下标从0~length-1
uppermid = length/2 (取到中间偏右0~1)
lowermid = (length-2)/2 (取到中间偏左0~1)
mid = (length-1)/2 (计算机向下取整,等同下位中位数)
即为(low+high)/2
2.开启循环最大数或最小数的选择是否直接选择mid
已比较过无需重复选择以相邻下标定义即可
high = mid-1 (if(innum)
3.避免新的mid运算过程中数据溢出
(low+high)/2 等价于(low+high)>> 1
不过low+high可能会超出数据类型所定义的最大值,造成数据溢出
故应该通过减法进行操作 mid=low+(high-low)/2
4.终止的条件
low>high //发生重叠
5.插入点的选择
插入数小于最小数则所有元素后移否则
low即为插入点下标,先将该元素即之后的元素后移一位,再将插入数插入到该位置
实现方法
1.while循环
2.递归调用//太卡了
【二分排序的问题】以下为有序数组插入一个数的代码实现,最后一位为待插入数据
public static voidbinaryinto(int[] arr){
int temp = arr[arr.length-1];
//temp存放需插入的值
int low = 0;
//low存放查找下界索引
int high = arr.length-2;
//high存放查找上界索引
int mid = arr.length-2;
//中间元素下标(偏左)
while(low<=high){ //使low下标>high下标(j交叉),那么low位置即为该插入位置
if(arr[0]>=arr[arr.length-1]) {
break;
}//如果插入的比第一个数还小或等于不进行循环
if(arr[mid]=low;
i--){//比插入值大的后移一位
arr[i+1] = arr[i];
}
arr[low] = temp;
}
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量