I am trying to sort the multiple arrays based on the ascending order of one array. Here is the example:
int a[10] = {55140, 32294, 33321, 64321, 55312}
float b[10] = {11.11, 202.22, 3213.21, 144.32, 1.32}
const char* c[10] = {+, -, -, -, +}
unsigned char* d[10] = {22DS3K, 1FGJ29, 21FD43, 98DS03, 56DK23}
Now, after arranging the array 'a' in ascending order I want to sort the other arrays. The output should look like as follows:
a[10] = {32294, 33321, 55140, 55312, 64321}
b[10] = {202.22, 3213.21, 11.11, 1.32, 144.32}
c[10] = {-, -, +, +, -}
d[10] = {1FGJ29, 21FD43, 22DS3K, 56DK23, 98DS03}
Arranging the ascending order works fine. But, I am unable to sort the other arrays. I woould like to create a function to use it in my main function. Pleased to hear some suggestions.
I have seen the below post, but did not help me.
Sorting an array based on another in C
Here is the code that I have tried:
struct Data{
int a[10];
float b[10];
const char* c[10];
unsigned char* d[10];
} data;
int data_a[10];
float data_b[10];
const char* data_c[10];
unsigned char* d[10];
void ascending(int *t; int N){
int i,j,tmp;
for(i=0;j<N;j++){
for(j=i+1;j<N;j++){
if(t[i] > t[j]){
tmp=t[i];
t[i]=t[j];
t[j]=tmp;
}}}}
int main(){
int i;
for(i=0;i<5;i++){
data.a[i] = data_a[i];
data.b[i] = data_b[i];
data.c[i] = data_c[i];
data.d[i] = data_d[i];
}
ascending(data.a, 5);
for(i=0;i<5;i++){
printf("Data is %d,%.2f,%s,%hhn\n", data.a[i],data.b[i],data.c[i],data.d[i]};
}}
May I know if I am missing something or doing something completely wrong?
structto group these related fields together. Keeping parallel arrays like this in sync is a total nightmare, and makes your code really messy and comlpexvoid swap()function that would takevoid * tab, int size, int index1, int index2, that would swap two elements of sizesizefrom tabletabfrom indexesindex1andindex2. Inmain()function (or wherever you want to sort your arrays) run an ordinary bubble sort algorythm. Every time you swap elements from table "a" do so for the rest.