2010-12-19 3 views
0

Я написал алгоритм quicksort в C#, но у него есть проблема, когда я его компилирую, он не работает в некоторых условиях, например, когда я ввожу число 12,32,11 в textbox6 для сортировки, это выдает ошибки диапазона, когда я перейти проследить его, отладчик показывает, что Num [] принял НУМС [0] = 12, НУМС [1] = 11, НУМС [2] = 1Проблема с алгоритмом QuickSort в C#

Отредактировано: я изменил состояние в то время, и это знает оленью кожу выдает ошибки диапазона, но когда вход 12,32,11 выход 11,12,1

private void button5_Click(object sender, EventArgs e) 
    { 
     string[] x = textBox6.Text.Split(','); 
     int[] nums = new int[x.Length]; 

     for (int counter = 0; counter < x.Length; counter++) 
     { 
      nums[counter] = Convert.ToInt32(x[counter]); 
     } 

     int i = 0; 
     int j = nums.Length; 
     int pivot = nums[0]; 
     do 
     { 
      do 
      { 
        i++; 
      } 
        while ((i < nums.Length) && (nums[i] < pivot)); 
      do 
       { 
        j--; 
       } 
while (nums[j]>pivot); 
      if (i < j) 
      { 
       int temp = i; 

       nums[i] = nums[j]; 
       nums[j] = temp; 

      } 

     }while(i<j); 
     int temp1 = nums[0]; 
     nums[0] = nums[j]; 
     nums[j] = temp1; 
     int pivotpoint = j; 
     string QuickSort = ""; 
     foreach (var n in nums) 
      QuickSort += n.ToString() + ","; 
     textBox5.Text = QuickSort; 

    } 
+1

, возможно, вы должны разместить полный код ... В любом случае, реализацию быстрой сортировки в обработчике события кнопки не похож очень хорошая идея ... –

+0

1) Вы не опубликовали полный цикл. 2) Я не вижу рекурсии. Итак, как это должно быть быстро сортировать? – CodesInChaos

+0

Я внесла свой вопрос и вставлю полный код – Arash

ответ

2

Ваш вопрос в том, что i не проверяется границами в цикле do-while. i будет увеличиваться за пределы вашего массива nums. Попробуйте изменить условие Хотя, таким образом:

while ((i<nums.Length) && (nums[i]<pivot)) 

Конечно, вы могли бы просто использовать Array.Sort(nums);

+1

Скорее всего, это код студента, который пытается научиться реализовывать алгоритм быстрой сортировки, поэтому он, вероятно, не должен использовать 'Array.Sort'. –

+0

@Hosam Aly: Поскольку мы не * разрешаем * больше помечать вопросы как домашнюю работу, я должен рассмотреть любой вопрос как нерабочее задание. В любом случае, моя цель заключается в том, чтобы ответить на вопрос, не гарантируя, что их домашнее задание будет выполнено правильно. Ирония заключается в том, что вопрос был отредактирован ** после ** моего ответа, и все же OP имеет два условных условия без проверки границ. – Lazarus

+0

@ Lazarus: Извините меня, сэр, но я только что закончил свои коды и ничего не сделал. Я не изменил свой код, как вы сказали, потому что я стараюсь, чтобы ваш ответ мог измениться, когда вы видите полный код – Arash