Другие языки программирования и технологии

Программисты - совы, помогите!)) <СИ>

Разобрался с сортировкой массива по возрастанию\убыванию, но никак, блин, не доходит - каким образом можно провернуть это:
Примерно так:

int start = 0, end = n - 1;
for (int i = 1; i < n; ++i) {
int min = start;
for (int j = start + 1; j <= end; ++j) { if (arr[j] < arr[min]) { min = j; } }
swap(&arr[min], &arr[i % 2? start++ : end--]);
}
Сергей Алексеев
Сергей Алексеев
87 521
Лучший ответ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 27

void sort(int* begin, int* end, int (*comp)(int, int));
int gt(int a, int b){return a > b;}
int ls(int a, int b){return a < b;}

int main(void) {
int A[N];

srand(time(0));
for(int i = 0; i < N; i++){
A[i] = rand() % 100 + 1;
printf("%d ", A[i]);
}
printf("\n");

int down = 0, up = N;

while(down < up){
sort(&A[down], &A[up - 1], (up - down) % 2? gt : ls);
if((up - down) % 2) down++;
else up--;
}

for(int i = 0; i < N; i++)
printf("%d ", A[i]);
printf("\n");

return 0;
}

void sort(int* begin, int* end, int (*comp)(int, int)){
for(int* i = begin; i <= end; i++){
for(int* j = i + 1; j <= end; j++){
if(comp(*i, *j)){
int tmp = *i;
*i = *j;
*j = tmp;
}
}
}
}