二分法查找排序代码详解

qq_36121920 2016-09-12 05:11:42
package com.jrpay;

public class Test2 {
public static void binary_sort(int a[])
{
int i,j,temp;
int low ,hight ,mid;
for(i=1;i<a.length;i++)
{
temp = a[i];
low = 0;
hight = i-1;
while(low<=hight)
{
mid = (low+hight)/2;
if(a[mid]>temp)
hight =mid -1;
else
low = mid + 1;
}
for(j =i-1;j>hight;j--) 这里三行代码看不懂是什么意思,能为我解释一下吗,详细点,谢谢。
a[j+1] = a[j];
a[hight+1] = temp;
}
}
public static void main(String[] args) {
int a[] = {2,6,9,8,4,7,3,1,0,5};
binary_sort(a);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+ " ");
}
}
...全文
244 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
菲莱 2016-09-14
  • 打赏
  • 举报
回复
我就是自己拿纸画的,你跟踪一下,先不要用那么多数字啊,先用三个你试试就知道啦,按照程序的步骤在纸上画下来。
huyiyu 2016-09-12
  • 打赏
  • 举报
回复
刚刚表达的有问题 hight是数据应该插入的地方 i是已经排好序的最后一个数的下标 然后那个循环的擢用就是挪出一个位置让数能够插入 你拿一张纸出来画一下 排序只能自己领悟了 只可意会 不可言传
huyiyu 2016-09-12
  • 打赏
  • 举报
回复

//这个循环的作用是插入数据   上面的循环是为了找到插入位置   
 for(j =i-1;j>hight;j--)     
    a[j+1] = a[j];            //hight下标的地方是数据取出的地方,把应该插入数据的地方到   数据取出的地方的数据都向后挪一个位置
    a[hight+1] = temp;  //这个语句为了插入数据

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧