У вас есть сорт [для девочек], но он сломан. Изменения:
for (j = 0; j < (LENGTH2 - j - 1); j++)
В
for (j = 0; j < (LENGTH2 - i - 1); j++)
Чтобы избежать [ненужной] репликации кода, поместите код сортировки в отдельную функцию.
Сортировка обоих массивов.
Возьмите минимальную длину двух массивов (например, minlen
).
Я не уверен, что вы подразумеваете [точно] под "спариванием", но самое простое - печать спаривание
Тогда просто включите:
for (i = 0; i < minlen; ++i)
printf("Girl:%d Boy:%d\n",heightGirls[i],heightBoys[i]);
Если вам нужно что-то более сложное, вам может понадобиться массив struct
, например:
struct pair {
int boyheight;
int girlheight;
};
Этот массив должен иметь длину не менее minlen
. Вы можете заполнить его, адаптировав окончательный цикл печати.
Но если вы просто печатаете, вот пример кода:
#include <stdio.h>
void
print_single(const int *height,int len,const char *sex)
{
printf("\nHeight of %s in descending order\n",sex);
for (int i = (len - 1); i >= 0; i--)
printf(" %d", height[i]);
printf("\n");
}
void
sort_height(int *height,int len)
{
for (int i = 0; i < len; i++) {
for (int j = 0; j < (len - i - 1); j++) {
if (height[j] > height[j + 1]) {
int temp = height[j];
height[j] = height[j + 1];
height[j + 1] = temp;
}
}
}
}
int
main(void)
{
int heightBoys[] = { 5, 8, 7, 9, 6 };
int heightGirls[] = { 3, 1, 2 };
int LENGTH1 = sizeof(heightBoys) / sizeof(heightBoys[0]);
int LENGTH2 = sizeof(heightGirls) / sizeof(heightGirls[0]);
sort_height(heightBoys,LENGTH1);
print_single(heightBoys,LENGTH1,"boys");
sort_height(heightGirls,LENGTH2);
print_single(heightGirls,LENGTH2,"girls");
int minlen = LENGTH1;
if (minlen > LENGTH2)
minlen = LENGTH2;
printf("\n");
printf("Pairing:\n");
for (int i = 0; i < minlen; ++i)
printf("Girl:%d Boy:%d\n",heightGirls[i],heightBoys[i]);
return 0;
}
UPDATE:
Допустим, мы сами вводим высоты и их количество. Если у нас есть дополнительные высоты мальчиков или девочек, как мы можем вывести эти дополнительные высоты отдельно от остальных?
Две дополнительные петли for
, добавленные внизу, должны помочь. Чтобы это работало, переменная итерации последнего цикла for
в предыдущем примере должна быть определена вне цикла. Другими словами, обратите внимание на определение и использование ipair
ниже.
Если вы создаете массив типа struct
, который я предложил, эти циклы могут заполнить его. Тогда размер массива должен быть max(LENGTH1,LENGTH2)
.
И в непарных циклах (например, для мальчика 8 значение девочки в структуре может быть установлено на 0 или -1, чтобы указать, что мальчик непарный)
#include <stdio.h>
void
print_single(const int *height,int len,const char *sex)
{
printf("\nHeight of %s in descending order\n",sex);
for (int i = (len - 1); i >= 0; i--)
printf(" %d", height[i]);
printf("\n");
}
void
sort_height(int *height,int len)
{
for (int i = 0; i < len; i++) {
for (int j = 0; j < (len - i - 1); j++) {
if (height[j] > height[j + 1]) {
int temp = height[j];
height[j] = height[j + 1];
height[j + 1] = temp;
}
}
}
}
int
main(void)
{
int heightBoys[] = { 5, 8, 7, 9, 6 };
int heightGirls[] = { 3, 1, 2 };
int LENGTH1 = sizeof(heightBoys) / sizeof(heightBoys[0]);
int LENGTH2 = sizeof(heightGirls) / sizeof(heightGirls[0]);
sort_height(heightBoys,LENGTH1);
print_single(heightBoys,LENGTH1,"boys");
sort_height(heightGirls,LENGTH2);
print_single(heightGirls,LENGTH2,"girls");
int minlen = LENGTH1;
if (minlen > LENGTH2)
minlen = LENGTH2;
int ipair = 0;
printf("\n");
printf("Pairing:\n");
for (; ipair < minlen; ++ipair)
printf("Girl:%d Boy:%d\n",heightGirls[ipair],heightBoys[ipair]);
if (ipair < LENGTH1) {
printf("\n");
printf("Unpaired Boys:\n");
for (int i = ipair; i < LENGTH1; ++i)
printf("Boy:%d\n",heightBoys[i]);
}
if (ipair < LENGTH2) {
printf("\n");
printf("Unpaired Girls:\n");
for (int i = ipair; i < LENGTH2; ++i)
printf("Girl:%d\n",heightGirls[i]);
}
return 0;
}