A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如何用二分法对数组进行排序,求例子

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

5 个回复

倒序浏览
public static int halfSearch(int[] arr,int x){
                Arrays.sort(arr);                                //对数组进行排序
                int min = 0;
                int max = arr.length-1;                        //定义min和max确定每次查找的数组范围,在这个范围中取中间角标进行对比
                while(min<=max){
                        int mid = (min+max)/2;                //每次查找的角标

                        if(arr[mid]==x){
                                return mid;
                        }else if(arr[mid]>x){
                                max = mid-1;                        //角标处的数大,说明在该角标左侧,max=max-1
                        }else{
                                min = mid+1;                        //角标处的数小,说明在该角标的右侧,min=min+1
                        }
                }
                return -1;                                                //数组中没有该整数,返回-1
        }

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
楼主是指快速排序+二分查找么?
回复 使用道具 举报
  1. class HalfSearch
  2. {
  3. public static void main(String[] args)
  4.         {
  5.             int [] arr ={12,23,25,34,56,67,78,80};
  6.                     int index= halfSearch(arr,56);
  7.                         System.out.println("index="+index);
  8.     }

  9. public static int halfSearch(int[] arr,int key)
  10.         {      int min=0;
  11.             int max=arr.length-1;               
  12.                    int mid=0;
  13.            while (min<=max)
  14.                 {
  15.                                    mid=(mid+max)/2;
  16.                            if ( key==arr[mid])
  17.                            {
  18.                                    return mid;
  19.                            }
  20.                   else if (key>arr[mid])
  21.                   {
  22.                        min=mid+1;
  23.                   }
  24.                                   else if (key<arr[mid])
  25.                                   {
  26.                                           max=mid-1;
  27.                                   }
  28.                              
  29.            }
  30.           return -1;
  31.         }
  32. }
  33. 查找56(角标为4),运行结果为:index=4
复制代码
回复 使用道具 举报
二分查找 不是 排序算法,而是查找,你可以百度,很详细。
回复 使用道具 举报
这个算法希望能帮到你:
  1. public static int binarySearch(int[] a, int value)
  2. {   
  3.         int low = 0;
  4.         int high = a.length-1;  
  5.         while(low <= high)
  6.         {   
  7.                 mid = (low+high)/2;
  8.                 if (a[mid] == value)  
  9.                         return mid;
  10.                 else if (a[mid] > value)
  11.                         high = mid-1;  
  12.                 else   
  13.                         low = mid +1;   
  14.         }   
  15.         return -1;   
  16. }
复制代码



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马