Один подход: создать массив целых , который будет того же размера , что и ваш массив структур (массив S), и инициализируется от 0 до n-1 (где n - размер).
Сортируйте этот массив целых чисел с помощью любого алгоритма сортировки, который вам подходит, и обрабатывайте каждое целое число из массива A как индекс вашего массива S.
Сортируя массивиз индексов в соответствии с k_p или s_s_s, вы можете эффективно распечатать ваш массив S, как если бы он был отсортирован по убыванию k_p или s_s_s.
Давайте использовать пузырьковую сортировку (простой алгоритм сортировки для иллюстрации), и мы будем сортировать попо убыванию значений k_p:
int A[] = {0,1,2,3,4,5,6,7,8,9};
float k1,k2;
// bubble sort for descending order
for (int i = 0; i < n; i++)
{
k1 = &S[i].k_p;
for (int j = 1; j < n; j++)
{
k2 = &S[j].k_p;
if (k1 < k2)
{
// remember you're only switching the ints in array A
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
}
}
** Отказ от ответственности: я не проверял код, но это общая идея.