Problem z sortowaniem Quicksort C

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);
	}
}




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]);
    }
0

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

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

0

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

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