二进制搜索遇到一些问题,有人可以期待吗?

问题描述

二进制搜索和冒泡问题。无法理解二进制搜索伪代码的问题。为了获得目标编号的索引,我需要更改什么?

import java.util.*;
public class Binarysearch2 {
    
    static void bubblesort(int dizi[]){  // bubblesort //
        int o,p,temp;
        for(o=0;o<dizi.length-1;o++)
        {
            for(p=0;p<dizi.length-1-o;p++)
            {
                if(dizi[p+1]>dizi[p]){
                    temp=dizi[p];
                    dizi[p]=dizi[p+1];
                    dizi[p+1]=temp;
                }
            }
        }
    }
    
    static int search(int dizi[],int aranan) // binary search//
    {
        int ust=dizi.length-1;
        int alt=0;
        
        while(alt<=ust)
        {
            int orta=(alt+ust)/2;
            if(dizi[orta]==aranan){
                return orta;
            }
            else if (orta<aranan)
            {
                alt=orta+1;
            }
            else
                ust=orta-1;
        }
        return -1;
    }

public static void main(String[]args) //main//
{
Scanner tara=new Scanner(System.in);
System.out.println("Enter array lenght");
int x=tara.nextInt();
Random rnd= new Random();
int i;
int a[]=new int[x];
for(i=0;i<x;i++)
{
 a[i]=(1+rnd.nextInt(6));
System.out.print(a[i]+" ");

}
System.out.println();
System.out.println("Enter targeted number :");
int k,z;
k=tara.nextInt();
bubblesort(a);

z=Binarysearch2.search(a,k);

if(z==-1)
{System.out.println("Target is not in array.");}
else 
    System.out.println(k+" in array "+z +" . at this index.");

}}

我认为binarysearch中的某些内容是错误的。

解决方法

这里有个问题:

if (orta<aranan)
{
    alt=orta+1;
}

您将比较索引而不是将值(dizi[orta])与目标(aranan)进行比较。只需将条件替换为if (dizi[orta]<aranan)

此外,正如Anatoly在his answer中正确指出的那样,您的排序方向错误。当较低的气泡小于较大的气泡(if(dizi[p+1]>dizi[p]时,气泡排序会交换元素。这意味着您正在按降序顺序排序。另一方面,您的搜索假定该数组以顺序排序。

,

早上好, 如果您将使用英语来命名变量,那将真的很有帮助。二进制搜索是一个重要的假设,已在其中寻找元素的数组进行了排序。因此,如果您将排序方式添加到搜索方法中,则您的代码将起作用:

    static int search(int dizi[],int aranan) {
        int ust = dizi.length - 1;
        int alt = 0;

        Arrays.sort(dizi); // ADDED ELEMENT

        while (alt <= ust) {
            int orta = (alt + ust) / 2;
            if (dizi[orta] == aranan) {
                return orta;
            } else if (orta < aranan) {
                alt = orta + 1;
            } else
                ust = orta - 1;
        }
        return -1;
    }
,
  1. 数组排序方向错误。在bubblesort上的dizi[p+1] > dizi[p]上更改dizi[p+1] < dizi[p]
  2. search的{​​{1}}上更改else if (orta < aranan)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...