java - 制作二分查找函数
问题描述
我正在做一个家庭作业,我应该制作一个可以进行二进制插入排序的函数,但我的函数似乎无法正常工作。
这里我尝试将二分查找函数与插入排序函数结合起来(在作业任务中指定它需要采用函数的形式:insertionSort(int[] array, int lo, int hi))
public static void insertionSort(int[] array, int lo, int hi){
int mid;
int pos;
for (int i = 1; i < array.length; i++) {
int x= array[i];
while (lo < hi) {
mid = lo + (hi -lo)/2;
if (x == array[mid]) {
pos = mid;
}
if (x > array[mid]) {
lo = mid+1;
}
else if (x < array[mid]) {
hi = mid-1;
}
}
pos = lo;
for (int j = i; j > pos; j--) {
array[j] = array[j-1];
}
array[pos] = x;
}
}
如果我尝试使用列表 {2,5,1,8,3} 运行它,输出将是
2 5 1 3 1(如果 lo < hi 并且如果 lo > hi)
2 5 3 8 5(如果 lo==hi)
不过,我所期待的是一个排序列表......知道我做错了什么吗?
解决方案
每当我需要二进制搜索时,我的函数看起来如下:
public static void binarySearch(int arr[], int first, int last, int key){
int mid = (first + last)/2;
while( first <= last ){
if ( arr[mid] < key ){
first = mid + 1;
}else if ( arr[mid] == key ){
System.out.println("Element is found at index: " + mid);
break;
}else{
last = mid - 1;
}
mid = (first + last)/2;
}
if ( first > last ){
System.out.println("Element is not found!");
}
}
在您的主要方法中,调用如下所示:
public static void main(String[] args) {
int arr[] = {10,20,30,40,50};
int key = 30;
int last=arr.length-1;
binarySearch(arr,0,last,key);
}
我希望我能帮助你!
推荐阅读
- ios - 如何使用swift在ios应用程序中添加带有标题的超链接?
- azure - Azure B2C 错误:在技术配置文件中定义的 ID 为 \""objectId\"" 的查找声明无法找到声明
- spring-data-rest - 如何在 Spring Data REST 中自动扩展具有给定类型的所有关系?
- python - 如何在python中正确索引一个大矩阵
- r - r中条件str_replace_all的大小写敏感性
- javascript - 离子传递承诺到 RootParams
- javascript - 在momentjs中检查时间是否在两个小时之间的最佳方法
- css - 如何在 React 应用程序中使用 ::before CSS 伪选择器修改 Font Awesome Icon?
- java - JTable 中可编辑 JComboBox 的占位符
- prolog - Prolog - 模式匹配:由运算符链接的复杂表达式