Problem z sortowaniem Quicksort C

Odpowiedz Nowy wątek
Szara Myszka
2017-05-04 17:45
Szara Myszka
0

Dla tablicy nie za komentowanej działa, dla za komentowanej nie, nie rozumiem w czym jest problem.


#include <stdio.h>
#include <string.h>

void quickSortMain(char items[][10], int count);
void quickSort(char items[][10], int left, int right);

int main(void)
{
    int i;
    char str[][10] = { "ddd","bbb","ccc","ccc","aaa","aaa" };
    //char str[][10] = { "ddd","bbb","ccc","ccc","aaa","aaa","ccc","ddd" };
    quickSort(str, 0, 5);

    for (i = 0; i<6; i++) {
        printf("%s ", str[i]);
    }
    return 0;
}

void quickSort(char items[][10], int left, int right)
{
    int i, j;
    char *x;
    char temp[10];
    if ((strcmp(items[left], items[right]) < 0))
    {
        x = items[left];
        i = left;
        j = right;

        while (i < j)
        {
            while ((strcmp(items[i], x) < 0) && (i < right))
            {
                i++;
            }
            while (strcmp(items[j], x) > 0)
            {
                j--;
            }
            if (i < j)
            {
                strcpy(temp, items[i]);
                strcpy(items[i], items[j]);
                strcpy(items[j], temp);
            }
        }
        strcpy(temp, x);
        strcpy(x, items[j]);
        strcpy(items[j], temp);

        quickSort(items, left, j - 1);

        quickSort(items, j + 1, right);
    }
}

Pozostało 580 znaków

2017-05-04 18:38

Rejestracja: 2 lata temu

Ostatnio: 1 rok temu

0
    char str[][10] = { "ddd","bbb","ccc","ccc","aaa","aaa" };
    //char str[][10] = { "ddd","bbb","ccc","ccc","aaa","aaa","ccc","ddd" };
    quickSort(str, 0, 5);
    for (i = 0; i<6; i++) {
        printf("%s ", str[i]);
    }

zmień na

    //char str[][10] = { "ddd","bbb","ccc","ccc","aaa","aaa" };
    char str[][10] = { "ddd","bbb","ccc","ccc","aaa","aaa","ccc","ddd" };
    quickSort(str, 0, 7);
    for (i = 0; i<=7; i++) {// <= bardziej czytelne
        printf("%s ", str[i]);
    }
edytowany 1x, ostatnio: DnwK, 2017-05-04 18:39
<= nie jest bardziej czytelne i nikt tak nie pisze w C/C++/nigdzie. - Patryk27 2017-05-04 18:41
Subiektywna opinia, po prostu raz użyłem 7 jako ilość -1 więc by nie "liczyć" tego jeszcze raz dopisuję ten jeden znak. Ale jeżeli to jakiś błąd to dzięki za opinię ;) - DnwK 2017-05-04 18:44

Pozostało 580 znaków

Szara Myszka
2017-05-04 19:20
Szara Myszka
0

Nie w tym problem... Chodzi o to, że mi nie poprawnie sortuje.

Pozostało 580 znaków

2017-05-04 19:59

Rejestracja: 4 lata temu

Ostatnio: 4 miesiące temu

0

Nie ma opcji żeby to działało :/
Już po samym warunku to widać:

 if ((strcmp(items[left], items[right]) < 0))

bo co jeśli np. na początku i na końcu będą te same napisy ?
Ogólnie to "ten" kod powinien być podzielony na 2 funkcje. Pierwsza powinna nam zwracać punkt podziału naszej tablicy, a druga sortować jej pierwszy kawałek, a następnie drugi.
Nie będę wklejał całego kodu, bo świetny przykład znajduje się tutaj

PS. Popraw to: "nie za komentowanej", bo aż w oczy kole :D

edytowany 2x, ostatnio: dub.raf, 2017-05-04 20:01

Pozostało 580 znaków

Szara Myszka
2017-05-04 20:59
Szara Myszka
0

Dzięki za pomoc, niestety nie mam jak poprawić bo nie mam tutaj konta.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0