Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » Kool@ 15:46
 » Pawiano 15:44
 » zibi13 15:44
 » rulezDC 15:40
 » ToM78 15:39
 » bmiluch 15:27
 » Liu CAs 15:26
 » KHot 15:25
 » palioza 15:21
 » ngP 15:21
 » Mademan 15:18
 » bajbusek 15:15
 » Artaa 15:09
 » rainy 15:09
 » Chrisu 15:09
 » Pio321 15:08
 » soyo 15:08
 » Sherif 15:07
 » Kenny 15:06
 » ligand17 15:00

 Dzisiaj przeczytano
 36896 postów,
 wczoraj 25433

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2025
A R C H I W A L N A   W I A D O M O Ś Ć
    

Problem z quicksortowym rozdzielaniem w C , laciak88 9/12/09 17:47
Rozwiazanie pewnie jest jak zwykle banalne, ale cos nie moge na nie wpasc. Problemem jest podzial quicksorta (potrzebuje podzial, bez rekurencji) - przy sortowaniu rosnacym za os dostaje sie 1 mniejsza od niej liczba. Kod wyglada tak:

odp.tablica[0] = 44;
odp.tablica[1] = 75;
odp.tablica[2] = 98;
odp.tablica[3] = 43;
odp.tablica[4] = 55;
odp.tablica[5] = 12;
odp.tablica[6] = 64;
odp.tablica[7] = 77;
odp.tablica[8] = 33;
odp.tablica[9] = 14;
odp.tablica[10] = 31;
odp.tablica[11] = 13;
odp.tablica[12] = 27;
odp.tablica[13] = 56;
odp.tablica[14] = 66;
odp.tablica[15] = 62;
odp.tablica[16] = 54;
odp.tablica[17] = 45;
odp.tablica[18] = 11;
odp.tablica[19] = 99;

test[0] = 44;
test[1] = 75;
test[2] = 98;
test[3] = 43;
test[4] = 55;
test[5] = 12;
test[6] = 64;
test[7] = 77;
test[8] = 33;
test[9] = 14;
test[10] = 31;
test[11] = 13;
test[12] = 27;
test[13] = 56;
test[14] = 66;
test[15] = 62;
test[16] = 54;
test[17] = 45;
test[18] = 11;
test[19] = 99;

lewa=0;
prawa=19;
osa=test[(lewa+prawa)/2];
do
{
while (test[lewa]<osa)
{
lewa++;
}
while (test[prawa]>osa)
{
prawa--;
}
if (lewa <= prawa)
{
tempp = test[lewa];
test[lewa] = test[prawa];
test[prawa] = tempp;
lewa++;
prawa--;
}
} while (lewa < prawa);

printf("\nTABLICA TESTOWA: %d");
for(i=0;i<20;i++)
printf("%d ",test[i]);


wynik wyglada tak: 11 13 14 12 55 43 64 77 33 98 31 75 27 56 66 62 54 45 44 99
a powinien tak: 11 13 12 14 55 43 64 77 33 98 31 75 27 56 66 62 54 45 44 99

Co ta dwunastka chce od wiekszych? Prosze o pomoc. Dzieki z gory za nakierowanie/poprawe :)

"To Alcohol! The cause of, and solution to, all of
life's problems."

  1. za szybko , laciak88 9/12/09 17:48
    wkleilem. oczywiscie mialo byc bez odp.tablica

    "To Alcohol! The cause of, and solution to, all of
    life's problems."

  2. Wynik jest OK , Visar 10/12/09 14:15
    Na końcu algorytmu podział masz po 4 elemencie i wszystkie elementy <=14 są po lewej stronie podziału, a większe po prawej. Nie ustaliłeś granicy podziału jako indeksu tylko jako wartość i na końcu masz to spełnione.
    Zaś 12 jako osatnia została porównana, dlatego ustawiła się na końcu liczb mniejszych lub równych od 14, ale wciąż dobrze.
    Na początku 11 jest zamieniana z 44, 13 z 75, 14 z 98 i w końcu 12 z 43.

    Visar

    1. ale , laciak88 10/12/09 14:19
      liczba 14 zostaje elementem osiowym, nie 4 element. Czyli, ze jak? Brakuje jednego porownania? 14 z 12?

      "To Alcohol! The cause of, and solution to, all of
      life's problems."

  3. Element osiowy , Visar 10/12/09 14:52
    W podanym przykładzie kodu, kiedy wybierasz element osiowy z połowy tablicy, element ten może się przemieścić. Możesz zapamiętać jego indeks podczas przemieszczania i na końcu zamieniać go z elementem na granicy podziału, ale nie ma takiej konieczności, gdyż następne wywołanie qsorta (od lewej granicy do granicy podziału) i tak go w końcu ustawi.
    Jeśli chcesz aby element osiowy rzeczywiście znalazł się na granicy to najprościej wybierz go jako pierwszy element z tablicy, podziel tablicę zaczynając od drugiej pozycji i na końcu zamień wartości pierwszą i tą z granicy podziału. Wtedy element osiowy rozgraniczy elementy mniejsze od niego od tych większych.

    Visar

    
All rights reserved ® Copyright and Design 2001-2025, TwojePC.PL