Быстрая сортировка с указателями - C (СИ)
Формулировка задачи:
Здрауствуйте, подскажите пожадуйста, я сделал быструю сортировку с указателями, оно вроде работет - сортирует, но 1 елемент куда-то пропадает и вместо него появляется 0. Я не знаю почему так, уже всё посмотрел. Вот мой код, заранее спасибо.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define SIZE 9
int arr[SIZE];
void qsort(int *l, int *r) {
printf("\n");
for (int i = 0; i < SIZE; i++) {
printf("%d ", arr[i]);
}
printf("\n");
int size = (r - l);
int middle = size / 2;
int *i = l;
int *j = r;
int tmp=999;
while (i <= j) {
while (*i < *(i + middle)) i++;
while (*j > *(j - middle)) j--;
if (i <= j)
{
tmp = *i;
*i = *j;
*j = tmp;
i++;
j--;
}
if (i < r) {
printf("Left\n");
qsort(i, r);
}
if (l < j) {
printf("Right\n");
qsort(l, j);
}
}
}
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(NULL));
int *begin = arr;
int *end = arr + SIZE;
for (begin = arr, end = arr + SIZE; begin < end; begin++) {
*begin = rand() % 10 + 1;
}
for (begin = arr, end = arr + SIZE; begin < end; begin++) {
printf("%d ", *begin);
}
printf("\n");
begin = arr;
qsort(begin, end);
printf("\n");
for (begin = arr, end = arr + SIZE; begin < end; begin++) {
printf("%d ", *begin);
}
printf("\n");
system("pause");
}Решение задачи: «Быстрая сортировка с указателями»
textual
Листинг программы
qsort(begin, end);