Задача линейного поиска - PullRequest
       34

Задача линейного поиска

0 голосов
/ 30 августа 2011

В моей программе нет ошибок компиляции, но вывод неправильный.Пример ввода:

размер массива: 5
номера ввода: 5 4 3 2 1
// отсортировано: 1 2 3 4 5
поиск: 1
вывод: номер 1найден в индексе 4

выход должен быть номер 1 найден в индексе 0, так как числа были уже отсортированы.Как я могу изменить это на это.

    int[] nums = new int[100];
    int SizeNum;
    bool isNum = false;

    private void ExeButton_Click(object sender, EventArgs e)
    {
        int i, loc, key;
        Boolean found = false;
        string SizeString = SizeTextBox.Text;
        isNum = Int32.TryParse(SizeString, out SizeNum);
        string[] numsInString = EntNum.Text.Split(' ');   //split values in textbox
        for (int j = 0; j < numsInString.Length; j++)
        {
            nums[j] = int.Parse(numsInString[j]);
        }
        if (SizeNum == numsInString.Length)
        {
            Array.Sort(numsInString);
            key = int.Parse(SearchTextBox.Text);
            ResultText.AppendText("Sorted: ");
            for (i = 0; i < SizeNum; i++)
                ResultText.AppendText(" " + numsInString[i]);
                 ResultText.AppendText("\n\n");
            {
                for (loc = 0; loc < SizeNum; loc++)
                {
                    if (nums[loc] == key)
                    {
                        found = true;
                        break;
                    }
                }
                if (found == true)
                    ResultText.AppendText("Number " + key + " Found At Index [" + loc + "]\n\n");
                else
                    ResultText.AppendText("Number " + key + " Not Found!\n\n");
            }
        }
    }

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Вы сортируете numsInString, но затем ищете nums.nums заполняется перед поиском, поэтому вы видите результаты поиска несортированных чисел.

После того, как вы проанализировали numsInStrings в nums, вам следуетработать только с последним массивом.Убедитесь, что это тот, который вы сортируете и просматриваете.

Другими словами, как только вы замените текущий вызов сортировки на

Array.Sort(nums);

, ваш код будет в порядке.

Обновлено :

Вам действительно нужно другое исправление.Прямо сейчас вы инициализируете nums как массив размером 100. По умолчанию каждый элемент будет равен 0. Поэтому даже если вы поместите числа в первые пять элементов, при сортировке массива вы получите 950, затем 1 2 3 4 5.

Вы должны отложить инициализацию nums, пока не увидите, насколько велика numsInString:

string[] numsInString = EntNum.Text.Split(' ');   //split values in textbox
nums = new int[numsInString.Length];

for (int j = 0; j < numsInString.Length; j++)
{
    nums[j] = int.Parse(numsInString[j]);
}

Теперь, когда вы сортируете nums, вы увидите только те цифры, которые вы ввели.

1 голос
/ 30 августа 2011

вы сортируете массив numsInString, но продолжаете поиск в массиве nums.

for (loc = 0; loc < SizeNum; loc++)
{
    if (numsInString[loc] == key)
    {
        found = true;
        break;
    }
}
0 голосов
/ 30 августа 2011

Вы анализируете numsInString , затем вы сортируете это. (Я подозреваю, что сортировка не будет делать то, что вы хотите.)

Я думаю, вы действительно хотите сортировать nums вместо:

Array.Sort(nums);

Сказав это, существуют более простые способы достижения конечного результата - например, использование IndexOf для поиска индекса значения в массиве.

Также довольно непонятно, почему у вас здесь фигурные скобки:

for (i = 0; i < SizeNum; i++)
    ResultText.AppendText(" " + numsInString[i]);
    ResultText.AppendText("\n\n");
{
    ...
}

Это делает похожим на то, что у вас есть цикл с телом, но на самом деле это эквивалентно:

for (i = 0; i < SizeNum; i++)
{
    ResultText.AppendText(" " + numsInString[i]);
}
ResultText.AppendText("\n\n");
{
    ...
}

... фигурные скобки здесь не имеют смысла, а просто вредят читабельности.

...