C/C++

Упорядочить элементы массива по возрастанию на языке Си

Задание на языке Си.
Дана размерность одномерного массива size<=50, состоящего из целочисленных элементов. Ввести элементы массива с клавиатуры, упорядочить по возрастанию, использовав пользовательскую функцию.
#include <stdio.h>
#include <unistd.h>
void quicksort (int [], int, int);
int main()
{
int list[50];
int size, i;

printf("Enter the number of elements: ");
scanf("%d", &size);
printf("Enter the elements to be sorted:\n");
for (i = 0; i < size; i++)
{
scanf("%d", &list[i]);
}
quicksort(list, 0, size - 1);
printf("Quick sort:\n");
for (i = 0; i < size; i++)
{
printf("%d ", list[i]);
}
printf("\n");
sleep(10);
return 0;
}
void quicksort(int list[], int low, int high)
{
int pivot, i, j, temp;
if (low < high)
{
pivot = low;
i = low;
j = high;
while (i < j)
{
while (list[i] <= list[pivot] && i <= high)
{
i++;
}
while (list[j] > list[pivot] && j >= low)
{
j--;
}
if (i < j)
{
temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}

temp = list[j];
list[j] = list[pivot];
list[pivot] = temp;
quicksort(list, low, j - 1);
quicksort(list, j + 1, high);
}
}
ОП
Олег Поляков
37 945
Лучший ответ
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#define BUFFER 50
void swap(int* a, int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void sort(int* box, int size) {
int i, j;
for (i = 0; i < size - 1; i++)
for (j = i + 1; j < size; j++)
if (box[i] > box[j])
swap(&box[i], &box[j]);
}
void fill(int* box, int size) {
int i;
srand((unsigned)time(NULL));
for (i = 0; i < size; ++i) box[i] = 1 + rand() % BUFFER;
}
void show(int* box, int size) {
int i;
for (i = 0; i < size; ++i) printf("%4i", box[i]);
puts("");
}
int set_size() {
int size;
int i = 0;
do {
if (i) puts("Range: 1 ...50");
printf("Size: ");
scanf_s("%i", &size);
++i;
} while (size < 1 || size > BUFFER);
return size;
}
int main(void) {
int box[BUFFER];
int size = set_size();
fill(box, size);
show(box, size);
sort(box, size);
show(box, size);
system("pause > nul");
return 0;
}