Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: b2l в May 03, 2010, 17:59



Титла: Java и quicksort - Логическа грешка!
Публикувано от: b2l в May 03, 2010, 17:59
Всички знаете за quicksort. Въпроса ми е къде е логическата грешка, че аз с моя малък капацитет не мога да я открия.
Код
GeSHi (Java):
  1. class Quicksort
  2. {
  3.    static void qsort(char items[])
  4.    {
  5.        qs(items, 0, items.length-1);
  6.    }
  7.  
  8.    private static void qs(char items[], int left, int right)
  9.    {
  10.        int i, j;
  11.        char x, y;
  12.  
  13.        i = left;
  14.        j = right;
  15.        x = items[(left+right)/2];
  16.  
  17.        do
  18.        {
  19.            while((items[i] < x) && (j < right)) i++;
  20.            while((x < items[j]) && (j > left)) j--;
  21.  
  22.            if (i <= j)
  23.            {
  24.                y = items[i];
  25.                items[i] = items[j];
  26.                items[j] = y;
  27.                i++; j--;
  28.            }
  29.        } while (i <= j);
  30.  
  31.        if (left < j) qs(items, left, j);
  32.        if (i < right) qs(items, i, right);
  33.    }
  34. }
  35.  
  36. public class QSDemo
  37. {
  38.  
  39.    public static void main(String[] args)
  40.    {
  41.        char a[] = { 'd', 'x', 'a', 'r', 'p', 'j', 'i' };
  42.        int i;
  43.  
  44.        System.out.println("Original Array is: ");
  45.  
  46.        for (i = 0; i < a.length; i++)
  47.        {
  48.            System.out.print(a[i] + " ");
  49.        }
  50.  
  51.        System.out.println();
  52.  
  53.        Quicksort.qsort(a);
  54.  
  55.        System.out.print("Sorted Array: ");
  56.  
  57.        for(i = 0; i < a.length; i++)
  58.        {
  59.            System.out.print(a[i] + " ");
  60.        }
  61.        System.out.println();
  62.    }
  63. }
  64.  

Output:
Код
GeSHi (Java):
  1. Original Array is:
  2. d x a r p j i
  3. Sorted Array: a j i p d x r

И както се вижда от output-a масива не е сортиран.


Титла: Re: Java и quicksort - Логическа грешка!
Публикувано от: bop_bop_mara в May 03, 2010, 20:49
Аре фокусирай се върху 19 и 20 ред  :D :D :D


Титла: Re: Java и quicksort - Логическа грешка!
Публикувано от: victim70 в May 03, 2010, 21:18
Аре фокусирай се върху 19 и 20 ред  :D :D :D

//офф
Марче плашиш ме вече. Отговаряш и на С, С++ и на Явата.  ::) . На какво пишеш и интересно какво  ??? .
 [_]3


Титла: Re: Java и quicksort - Логическа грешка!
Публикувано от: bop_bop_mara в May 03, 2010, 21:22
Аре фокусирай се върху 19 и 20 ред  :D :D :D

//офф
Марче плашиш ме вече. Отговаряш и на С, С++ и на Явата.  ::) . На какво пишеш и интересно какво  ??? .
 [_]3
Пиша на клавиатура  ;D ;D ;D Ама аз C++ не знам и не харесвам, и Java не харесвам, ама то quick sort-а не е нещо зависимо от езика.


Титла: Re: Java и quicksort - Логическа грешка!
Публикувано от: b2l в May 03, 2010, 22:16
Аре фокусирай се върху 19 и 20 ред  :D :D :D

Дай ми малко повече hint :).


Титла: Re: Java и quicksort - Логическа грешка!
Публикувано от: Naka в May 03, 2010, 22:35
Много интерестно. Хем Quick хем Java. :D


Титла: Re: Java и quicksort - Логическа грешка!
Публикувано от: b2l в May 03, 2010, 22:38
Езика не е важен, важна е логиката.


Титла: Re: Java и quicksort - Логическа грешка!
Публикувано от: b2l в May 03, 2010, 22:51
Марчето беше права! Благодаря за което. на 19 и 20 ред има грешка, правилния код е:
Код
GeSHi (Java):
  1. while((items[i] < x) && (i < right)) i++;
  2. while((x < items[j]) && (j > left)) j--;