C#获取二进制搜索以显示数组中的所有重复值

C#获取二进制搜索以显示数组中的所有重复值,c#,arrays,duplicates,binary-search,C#,Arrays,Duplicates,Binary Search,如果我搜索我的排序数组,它只显示其中一个值,即使数组中有多个相同的值。我不想让它告诉我有多少重复项,我想让它显示我搜索的数组中的所有重复值。或者我需要使用不同的搜索来执行此操作 所以如果我有数组1{1,2,3,4,4,5,5,5,6},我搜索5,我希望它输出: 5 5 5 5 这是我的二进制搜索代码 public class search { public static void Main(string[] args) { //Arrays are c

如果我搜索我的排序数组,它只显示其中一个值,即使数组中有多个相同的值。我不想让它告诉我有多少重复项,我想让它显示我搜索的数组中的所有重复值。或者我需要使用不同的搜索来执行此操作

所以如果我有数组1{1,2,3,4,4,5,5,5,6},我搜索5,我希望它输出:

5
5
5
5
这是我的二进制搜索代码

 public class search
    {
    public static void Main(string[] args)
    {
        //Arrays are created here. e.g. array1{1,2,3,4,4,5,5,5,5,6}

        int Input;

    Console.WriteLine("Enter the number you would like to search for.");
    Input = Convert.ToInt32(Console.ReadLine());
    int y = BinarySearch(array1, Input);
Console.WriteLine("array1 {0} : array2{1} : array3 {2} : array4 {3} : array5 {4}",array1[y], array2[y], array3[y], array4[y], array5[y]);
}       

 public static int BinarySearch(double[] Array, int Search)
        {
            int x = Array.Length;
        int low = 0;
        int high = x - 1;

        while (low <= high)
        {
            while (low <= high)
            {
                int mid = (low + high) / 2;
                if (Search < Array[mid])
                {
                    high = mid - 1;
                }
                else if (Search > Array[mid])
                {
                    low = mid + 1;
                }
                else if (Search == Array[mid])
                {
                    Console.WriteLine("{0}", Search);
                    return mid;
                }
            }
            Console.WriteLine("{0} was not found.", Search);
        }
        return high;
      }
}
公共类搜索
{
公共静态void Main(字符串[]args)
{
//在这里创建数组。例如,数组1{1,2,3,4,4,5,5,5,6}
int输入;
WriteLine(“输入您要搜索的号码”);
输入=Convert.ToInt32(Console.ReadLine());
int y=二进制搜索(array1,输入);
WriteLine(“array1{0}:array2{1}:array3{2}:array4{3}:array5{4}”,array1[y],array2[y],array3[y],array4[y],array5[y]);
}       
公共静态整型二进制搜索(双[]数组,整型搜索)
{
int x=数组长度;
int低=0;
int高=x-1;

虽然(low当然,您可以使用二进制搜索。但是您的代码有点奇怪。因为当您在这里找到第一个元素时,
else if(search==array[mid])…
会立即从函数返回,并且不再调用它。这就是为什么您只得到一个结果

为了使其工作,当您找到这样的元素时,您需要在数组中通过索引low…mid-1进行搜索,然后通过索引mid+1…high进行搜索

下面是代码,但我强烈建议您不要只是复制它,还可以尝试将其重写到while循环中(每个递归都可以重写为循环)

静态void二进制搜索(int[]数组、int低位、int高位、int searchedValue)
{
如果(低>高)
返回;
int mid=(低+高)/2;
if(searchedValue<数组[mid])
{
高=中-1;
二进制搜索(数组、低位、高位、searchedValue);
}
else if(searchedValue>array[mid])
{
低=中+1;
二进制搜索(数组、低位、高位、searchedValue);
}
else if(searchedValue==数组[mid])
{
Console.WriteLine(数组[mid]);
二进制搜索(数组,低,中-1,searchedValue);
二进制搜索(数组,中+1,高,searchedValue);
}            
}

当然,您可以使用二进制搜索。但是您的代码有点奇怪。因为当您在这里找到第一个元素时,
else if(search==array[mid])…
会立即从函数返回,并且不再调用它。这就是为什么您只得到一个结果

为了使其工作,当您找到这样的元素时,您需要在数组中通过索引low…mid-1进行搜索,然后通过索引mid+1…high进行搜索

下面是代码,但我强烈建议您不要只是复制它,还可以尝试将其重写到while循环中(每个递归都可以重写为循环)

静态void二进制搜索(int[]数组、int低位、int高位、int searchedValue)
{
如果(低>高)
返回;
int mid=(低+高)/2;
if(searchedValue<数组[mid])
{
高=中-1;
二进制搜索(数组、低位、高位、searchedValue);
}
else if(searchedValue>array[mid])
{
低=中+1;
二进制搜索(数组、低位、高位、searchedValue);
}
else if(searchedValue==数组[mid])
{
Console.WriteLine(数组[mid]);
二进制搜索(数组,低,中-1,searchedValue);
二进制搜索(数组,中+1,高,searchedValue);
}            
}

您在第一次匹配时有
return
语句您在第一次匹配时有
return
语句
static void BinarySearch(int[] array, int low, int high, int searchedValue)
    {
        if (low > high)
            return;
            int mid = (low + high) / 2;
            if (searchedValue < array[mid])
            {
                high = mid - 1;
                BinarySearch(array, low, high, searchedValue); 
            }
            else if (searchedValue > array[mid])
            {
                low = mid + 1;
                BinarySearch(array, low, high, searchedValue);
            }
            else if (searchedValue == array[mid])
            {
                Console.WriteLine(array[mid]);
                BinarySearch(array, low, mid - 1, searchedValue);
                BinarySearch(array, mid + 1, high, searchedValue);               
            }            
    }