#include <stdio.h>
#include <stdlib.h>
// Цвета.
int a[10] = { 5, 3, 1, 0, 6, 9, 8, 2, 7, 4 };
// Веса.
int b[10] = { 30, 97, 72, 31, 89, 28, 56, 83, 99, 66 };
struct bottle { int weight; int color; };
static int compare_structures(const void *e1, const void *e2)
{
// Преобразовываем в указатели на склянки.
const struct bottle *b1 = e1;
const struct bottle *b2 = e2;
// Сравниваем.
// return (b1->weight < b2->weight) ? -1 : (b1->weight > b2->weight) ? 1 : 0;
return b1->weight - b2->weight;
}
static void using_structures(void)
{
// Создаем и заполняем массив структур. В реальности этого делать не нужно,
// нужно сразу хранить в таком виде.
struct bottle bottles[10];
for (size_t i = 0; i < 10; i++)
{
bottles[i].color = a[i];
bottles[i].weight = b[i];
}
// Сортируем.
qsort(bottles
, 10, sizeof(bottles
[0]), compare_structures
);
// Выводим.
for (size_t i = 0; i < 10; i++)
printf("Bottle: color %i, weight %i\n", bottles
[i
].
color, bottles
[i
].
weight); }
static int compare_with_indices(const void *e1, const void *e2)
{
// Достаем индексы.
size_t i1 = *(const size_t *) e1;
size_t i2 = *(const size_t *) e2;
// Сравниваем.
// return (b[i1] < b[i2]) ? -1 : (b[i1] > b[i2]) ? 1 : 0;
return b[i1] - b[i2];
}
static void using_indices(void)
{
// Наша сортированная вьюшка с индексами.
int sorted_by_weight[10];
// Заполняем.
for (size_t i = 0; i < 10; i++)
sorted_by_weight[i] = i;
// Сортируем.
qsort(sorted_by_weight
, 10, sizeof(sorted_by_weight
[0]), compare_with_indices
);
// Выводим.
for (size_t i = 0; i < 10; i++)
{
size_t j = sorted_by_weight[i];
printf("Bottle %zu: color %i, weight %i\n", j
, a
[j
], b
[j
]); }
}
int main(void)
{
printf("Using structures:\n"); using_structures();
using_indices();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vINCm0LLQtdGC0LAuCmludCBhWzEwXSA9IHsgNSwgMywgMSwgMCwgNiwgOSwgOCwgMiwgNywgNCB9OwoKLy8g0JLQtdGB0LAuCmludCBiWzEwXSA9IHsgMzAsIDk3LCA3MiwgMzEsIDg5LCAyOCwgNTYsIDgzLCA5OSwgNjYgfTsKCnN0cnVjdCBib3R0bGUgeyBpbnQgd2VpZ2h0OyBpbnQgY29sb3I7IH07CgpzdGF0aWMgaW50IGNvbXBhcmVfc3RydWN0dXJlcyhjb25zdCB2b2lkICplMSwgY29uc3Qgdm9pZCAqZTIpCnsKCS8vINCf0YDQtdC+0LHRgNCw0LfQvtCy0YvQstCw0LXQvCDQsiDRg9C60LDQt9Cw0YLQtdC70Lgg0L3QsCDRgdC60LvRj9C90LrQuC4KCWNvbnN0IHN0cnVjdCBib3R0bGUgKmIxID0gZTE7Cgljb25zdCBzdHJ1Y3QgYm90dGxlICpiMiA9IGUyOwoJCgkvLyDQodGA0LDQstC90LjQstCw0LXQvC4KCS8vIHJldHVybiAoYjEtPndlaWdodCA8IGIyLT53ZWlnaHQpID8gLTEgOiAoYjEtPndlaWdodCA+IGIyLT53ZWlnaHQpID8gMSA6IDA7IAoJcmV0dXJuIGIxLT53ZWlnaHQgLSBiMi0+d2VpZ2h0Owp9CgpzdGF0aWMgdm9pZCB1c2luZ19zdHJ1Y3R1cmVzKHZvaWQpCnsKCS8vINCh0L7Qt9C00LDQtdC8INC4INC30LDQv9C+0LvQvdGP0LXQvCDQvNCw0YHRgdC40LIg0YHRgtGA0YPQutGC0YPRgC4g0JIg0YDQtdCw0LvRjNC90L7RgdGC0Lgg0Y3RgtC+0LPQviDQtNC10LvQsNGC0Ywg0L3QtSDQvdGD0LbQvdC+LAoJLy8g0L3Rg9C20L3QviDRgdGA0LDQt9GDINGF0YDQsNC90LjRgtGMINCyINGC0LDQutC+0Lwg0LLQuNC00LUuCgkKCXN0cnVjdCBib3R0bGUgYm90dGxlc1sxMF07CgkKCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTA7IGkrKykKCXsKCQlib3R0bGVzW2ldLmNvbG9yID0gYVtpXTsKCQlib3R0bGVzW2ldLndlaWdodCA9IGJbaV07Cgl9CgkKCS8vINCh0L7RgNGC0LjRgNGD0LXQvC4KCXFzb3J0KGJvdHRsZXMsIDEwLCBzaXplb2YoYm90dGxlc1swXSksIGNvbXBhcmVfc3RydWN0dXJlcyk7CgkKCS8vINCS0YvQstC+0LTQuNC8LgoJZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDsgaSsrKQoJCXByaW50ZigiQm90dGxlOiBjb2xvciAlaSwgd2VpZ2h0ICVpXG4iLCBib3R0bGVzW2ldLmNvbG9yLCBib3R0bGVzW2ldLndlaWdodCk7Cn0KCnN0YXRpYyBpbnQgY29tcGFyZV93aXRoX2luZGljZXMoY29uc3Qgdm9pZCAqZTEsIGNvbnN0IHZvaWQgKmUyKQp7CgkvLyDQlNC+0YHRgtCw0LXQvCDQuNC90LTQtdC60YHRiy4KCXNpemVfdCBpMSA9ICooY29uc3Qgc2l6ZV90ICopIGUxOwoJc2l6ZV90IGkyID0gKihjb25zdCBzaXplX3QgKikgZTI7CgkKCS8vINCh0YDQsNCy0L3QuNCy0LDQtdC8LgoJLy8gcmV0dXJuIChiW2kxXSA8IGJbaTJdKSA/IC0xIDogKGJbaTFdID4gYltpMl0pID8gMSA6IDA7CglyZXR1cm4gYltpMV0gLSBiW2kyXTsKfQoKc3RhdGljIHZvaWQgdXNpbmdfaW5kaWNlcyh2b2lkKQp7CgkvLyDQndCw0YjQsCDRgdC+0YDRgtC40YDQvtCy0LDQvdC90LDRjyDQstGM0Y7RiNC60LAg0YEg0LjQvdC00LXQutGB0LDQvNC4LgoJaW50IHNvcnRlZF9ieV93ZWlnaHRbMTBdOwoJCgkvLyDQl9Cw0L/QvtC70L3Rj9C10LwuCglmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwOyBpKyspCgkJc29ydGVkX2J5X3dlaWdodFtpXSA9IGk7CgkKCS8vINCh0L7RgNGC0LjRgNGD0LXQvC4KCXFzb3J0KHNvcnRlZF9ieV93ZWlnaHQsIDEwLCBzaXplb2Yoc29ydGVkX2J5X3dlaWdodFswXSksIGNvbXBhcmVfd2l0aF9pbmRpY2VzKTsKCQoJLy8g0JLRi9Cy0L7QtNC40LwuCglmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwOyBpKyspCgl7CgkJc2l6ZV90IGogPSBzb3J0ZWRfYnlfd2VpZ2h0W2ldOwoJCXByaW50ZigiQm90dGxlICV6dTogY29sb3IgJWksIHdlaWdodCAlaVxuIiwgaiwgYVtqXSwgYltqXSk7Cgl9Cn0KCmludCBtYWluKHZvaWQpCnsKCXByaW50ZigiVXNpbmcgc3RydWN0dXJlczpcbiIpOwoJdXNpbmdfc3RydWN0dXJlcygpOwoJcHJpbnRmKCJVc2luZyBpbmRpY2VzOlxuIik7Cgl1c2luZ19pbmRpY2VzKCk7CglyZXR1cm4gMDsKfQo=
Using structures:
Bottle: color 9, weight 28
Bottle: color 5, weight 30
Bottle: color 0, weight 31
Bottle: color 8, weight 56
Bottle: color 4, weight 66
Bottle: color 1, weight 72
Bottle: color 2, weight 83
Bottle: color 6, weight 89
Bottle: color 3, weight 97
Bottle: color 7, weight 99
Using indices:
Bottle 5: color 9, weight 28
Bottle 0: color 5, weight 30
Bottle 3: color 0, weight 31
Bottle 6: color 8, weight 56
Bottle 9: color 4, weight 66
Bottle 2: color 1, weight 72
Bottle 7: color 2, weight 83
Bottle 4: color 6, weight 89
Bottle 1: color 3, weight 97
Bottle 8: color 7, weight 99