Меня попросили написать эффективную функцию со временем выполнения n, которая сортирует массив по оставшимся 3, программа помещает элементы, для которых остаток от деления на 3 равен 0, после элементов, что остаток равен 1, а затем 2, например.массив {7, 16, 3, 28, 12, 31, 14, 12} будет сортироваться таким образом {12, 3, 12, 28, 16, 31, 7, 14}, поэтому я пытаюсь написать эффективную функцию, ноон не охватывает все случаи и не работает для всех массивов
int arr[] = { 7,16,3,28,12,31,14,12 };
int rem0 = 0, rem1 = 1, rem2 = 2;
for (int i = 0; i < 8; i++) {
if (arr[i] % 3 == 0)
rem0++;
if (arr[i] % 3 == 1)
rem1++;
if (arr[i] % 3 == 2)
rem2++;
}
int k = rem0, p = 0, m = 0 = 0;
for (int i = 0; i < 8; i++) {
while (rem0-k){
swap(&arr[i], &arr[rem0 - k]);
k--;
}
if (arr[i] % 3 == 1 && rem0+m<7) {
swap(&arr[i], &arr[rem0 + m]);
m++;
}
if (arr[i] % 3 == 1 && rem0 + rem1 + p<7) {
swap(&arr[i], &arr[rem0+rem1 + p]);
p++;
}
}
for (int l = 0;l <8;l++) {
printf("%d\n", arr[l]);
}
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
swap switch elements. Может кто-нибудь сказать мне, как я могу это исправить?
спасибо:)