Обратный бублосорт, сохраняющий индекс позиций? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть две таблицы на языке C размером 8 со следующими элементами

int  arr1[8]  = {400, 100, 213, 876, 900, 564, 211, 230};
float arr2[8] = {5.5, 2.1, 9.4, 2.6, 7.5, 4.3, 1.1, 7.5};

Я хочу создать программу для отображения данных на основе значений arr2 по убыванию (используя сортировку), как показано ниже:

ARR1  ARR2
213   9.4
900   7.5
230   7.5
400   5.5
564   4.3
876   2.6
100   2.1
211   1.1

-

#include <stdio.h>

void swap(float *xp, float *yp) 
{ 
    float temp = *xp; 
    *xp = *yp; 
    *yp = temp; 
} 

void BubbleSort(float arr[], int n) 
{ 
   int i, j; 
   for (i = 0; i < n-1; i++){   

       for (j = 0; j < n-i-1; j++) {

           if (arr[j] < arr[j+1]) 
              swap(&arr[j], &arr[j+1]); 
       }
   }
}

 void main(){
    int  arr1[8]  = {400, 100, 213, 876, 900, 564, 211, 230};
    float arr2[8] = {5.5, 2.1, 9.4, 2.6, 7.5, 4.3, 1.1, 7.5}; 

 }

У меня проблема в том, что я понимаю, что мне нужно вести индекс строк.Не могли бы вы мне помочь, пожалуйста ?

1 Ответ

0 голосов
/ 22 февраля 2019

Это немного похоже на домашнюю работу, поэтому я не буду показывать полную программу.

У вас есть два варианта:

  1. Создать дополнительный индексный массив с индексомзначения 0..7 для ваших массивов данных и сортировки путем замены значений массива индекса.Что-то вроде
    if (arr[index[j]] < arr[index[j+1]]) swap(&index[j], &index[j+1]);

  2. Передайте оба массива arr1 и arr2 в BubbleSort и поменяйте местами значения с одинаковой парой индексов для обоих массивов.Что-то вроде
    if (arr2[j] < arr2[j+1]) { swapInt(&arr1[j], &arr1[j+1]); swapFloat(&arr2[j], &arr2[j+1]); }

Лучше, чем использовать два массива, которые связаны индексом (аналогично структуре массивов), использовать массив структур.

struct data {
    int intval;
    float floatval;
};

struct data arr[8];

и в BubbleSort что-то вроде

if (arr[j].floatval < arr[j+1].floatval)
    swap(&arr[j], &arr[j+1]);
...