Исправлено.
Сначала я добавил целую кучу запусков и & s, потому что боялся, что функция получит только копию переданных значений, закажет эту копию и потеряет ее, как только стек память больше не была выделена для него. Оказывается, имена массивов на самом деле работают как указатели на первое значение, даже если массивы не являются строками, поэтому мне вообще не приходилось манипулировать какой-либо памятью.
Исправлены также логики c, я Прошу прощения за загрузку такого глючного кода вначале.
И, конечно, потому что это шейкер, не совсем, но может быть? idk.
#include <stdio.h>
void inv_cocksort(int arr[], int first, int last);
int main(void)
{
int unsorted[11] = {3, 1, 4, 5, 4, 2, 6, 9, 2, 8, 7};
int unsorted_length = 11;
for (int i = 0; i < unsorted_length; i++)
{
printf("%i", unsorted[i]);
}
printf("\n");
inv_cocksort(unsorted, 0, unsorted_length-1);
for (int j = 0; j < unsorted_length; j++)
{
printf("%i", unsorted[j]);
}
}
void inv_cocksort(int arr[], int first, int last)
{
if (first > last)
{
return;
}
else
{
for (int i = first; i <= last; i++)
{
if (arr[i] < arr[last])
{
int temp = arr[last];
arr[last] = arr[i];
arr[i] = temp;
}
if (arr[i] > arr[first])
{
int temp2 = arr[first];
arr[first] = arr[i];
arr[i] = temp2;
}
}
inv_cocksort(arr, first+1, last-1);
}
}