Zdravim! Píšem program, ktorý triedi zadané pole pomocou quicksortu, no nefunguje tak ako má a neviem prečo. Vie mi s tým niekto poradiť?
#include <stdio.h>
#include <stdlib.h>
void quickSort(int *pole, int zaciatocnyPrvok, int konecnyPrvok);
void swap(int *x, int *y);
int main()
{
int pocetPrvkov, i, zaciatocnyPrvok, konecnyPrvok;
int *pole; //Naše pole, ktoré budeme triediť
printf("Zadajte pocet prvkov pola: ");
scanf(" %d", &pocetPrvkov);
pole = (int *) malloc(pocetPrvkov * sizeof(int)); //Alokujeme potrebnú pamäť
for (i = 0; i < pocetPrvkov; i++)
{
printf("Hodnota prvku %d: ", i);
scanf(" %d", &pole[i]);
}
printf("Zaciatocny prvok triedenia: ");
scanf(" %d", &zaciatocnyPrvok);
printf("\nKonecny prvok triedenia: ");
scanf(" %d", &konecnyPrvok);
//Time for quicksort :)
//konecnyPrvok = pocetPrvkov - 1;
quickSort(pole, zaciatocnyPrvok, konecnyPrvok);
//Po utriedení vypíšem prvky...
printf("\n\nTriedim od %d po %d...\n", zaciatocnyPrvok, konecnyPrvok);
for (i = 0; i < pocetPrvkov; i++)
printf("Hodnota prvku %d: %d.\n", i, pole[i]);
getchar();
getchar();
return 0;
}
void swap(int *x, int *y)
{
int pomocna;
pomocna = *x;
*x = *y;
*y = pomocna;
}
void quickSort(int *pole, int zaciatocnyPrvok, int konecnyPrvok)
{
int pivot, mensie, i, l, r;
pivot = pole[konecnyPrvok - 1];
mensie = 0;
for (i = zaciatocnyPrvok; i < konecnyPrvok - 1; i++)
{
if (pole[i] < pivot)
mensie++;
}
swap (&pole[konecnyPrvok - 1], &pole[zaciatocnyPrvok + mensie]);
l = zaciatocnyPrvok;
r = konecnyPrvok - 1;
while (l < r)
{
while (pole[l] < pivot)
l++;
while(pole[r] >= pivot)
r--;
if (l < r)
swap(&pole[l], &pole[r]);
}
if (r > zaciatocnyPrvok)
quickSort(pole, l, r);
if (l + 2 < konecnyPrvok)
quickSort(pole, l + 1, konecnyPrvok);
}