Witam, na zajęcia zaimplementowałem szereg algorytmów sortowania i trzy z nich mi odrzucono ponieważ "gdzieś jest błąd"

  1. Quicksort w wersji Lomuto i Hoare'a. Dla optymistycznej i średniej wersji ma O(nlogn) a dla pesymistycznej O(n^2) jednak wszystkie czasy wyszły mi podobnie.
    Lomuto: 74.9s, 75,3s oraz 77.8s.
    Hoare'a: 43.9s, 43.7s oraz 43.66s.

Są trzy tablice o wielkości N.
Rosnąca[1...N], Malejąca[1...N], Losowa[1...N].

I czas pesymistyczny jest rzędu takiego tak optymistyczny i średni więc gdzieś powinien być błąd w kodzie. Siedzę i siedzę w debugerze szukając anomalii lecz znaleźć nie mogę. Może ktoś zerknąć okiem?

 
int PartitionLomuto(int A[], int p, int r) {
					int x = A[r],
						i = p - 1,
						temp;
						
					for(int j = p; j <= r - 1; j++)
						if(A[j] <= x) {
							i++;
							temp = A[i];
							A[i] = A[j];
							A[j] = temp;
						}
					temp = A[i + 1];
					A[i + 1] = A[r];
					A[r] = temp;
					return i + 1;
				}
				void Lomuto(int A[], int p, int r) {
					if(p < r) {
						int q = PartitionLomuto(A, p, r);
						Lomuto(A, p, q - 1);
						Lomuto(A, q + 1, r);
					}
				}
				int PartitionHoare(int A[], int p, int r) {
					int x = A[p],
						i = p,
						j = r,
						temp;
						
					while(true) {
						while(A[j] > x)
							j--;
						while(A[i] < x)
							i++;
						if(i < j) {
							temp = A[i]; 
							A[i] = A[j];
							A[j] = temp;
							i++;
							j--;
						}
						else
							return j;
					}
				}
				void Hoare(int A[], int p, int r) {
					if(p < r) {
						int q = PartitionHoare(A, p, r);
						Hoare(A, p, q);
						Hoare(A, q + 1, r);
					}
				}

  1. No z Bubblesort to samo. Losowa sortuje się dłużej niż pesymistyczna. A nie powinna.
void BubbleSort(int A[], int size) {
			bool swapped = true;
			int j = 0, temp;
			
			while(swapped) {
				swapped = false;
				j++;
				for(int i = 0; i < size - j; i++)
					if(A[i] > A[i + 1]) {
						temp = A[i];
						A[i] = A[i + 1];
						A[i + 1] = temp;
						swapped = true;
					}
			}
		}