Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 根据前两个数组中排序的第三个数组重新排列一对数组_C_Arrays_Data Structures - Fatal编程技术网

C 根据前两个数组中排序的第三个数组重新排列一对数组

C 根据前两个数组中排序的第三个数组重新排列一对数组,c,arrays,data-structures,C,Arrays,Data Structures,假设我有3个数组 arr1={96100104108} arr2={8,4,4,16} 现在我创建了第三个数组,我将在其中存储元素=arr1[I]/arr2[I] 因此arr3={12,25,26,9} 现在我想排序arr3。但也要按相同的顺序对arr1和arr2进行排序 像现在一样,arr3={9,12,25,26}我还想按照相同的顺序对arr1和arr2进行排序 arr1={108,96,100,104}arr2={16,8,4,4} 因此,对于arr3[2]=26我可以打印/使用arr1[

假设我有3个数组

arr1={96100104108}

arr2={8,4,4,16}

现在我创建了第三个数组,我将在其中存储元素=
arr1[I]/arr2[I]

因此
arr3={12,25,26,9}

现在我想排序
arr3
。但也要按相同的顺序对
arr1
arr2
进行排序

像现在一样,
arr3={9,12,25,26}
我还想按照相同的顺序对
arr1
arr2
进行排序

arr1={108,96,100,104}arr2={16,8,4,4}

因此,对于
arr3[2]=26
我可以打印/使用
arr1[2]=96&&arr2[2]=8

我希望能够通过
arr3

大多数(如果不是全部?)访问
arr1
arr2
的元素。排序将使用元素交换。当您对arr3进行排序并交换其中的元素时,只需交换其他数组的相应元素即可

因此,当您使用
arr3[j]
交换例如
arr3[i]
时,也可以使用
arr1[j]
交换
arr1[i]
arr2[i]
交换
arr2[j]

#include <iostream>
#include<bits/stdc++.h>
using namespace std;

// created a structure containing three elements
struct node
{
    int a;
    int b;
    int c;
} arr[3];

// comparator function which is used to sort structure based on its one property 'c' value
bool compareTwoStudents(node aa, node bb) 
{ 
    return (aa.c < bb.c); 
} 

int main() {
    
    arr[0].a=96;
    arr[1].a=100;
    arr[2].a=108;
    
    arr[0].b=8;
    arr[1].b=4;
    arr[2].b=16;
    
    arr[0].c=12;
    arr[1].c=25;
    arr[2].c=9;
    
    // sort function of c++, takes third argument as the custom comparator function
    sort(arr, arr+3, compareTwoStudents); 
    
    for(int i=0;i<3;i++)
    {
        cout<<arr[i].a<<" "<<arr[i].b<<" "<<arr[i].c<<"\n";
    }
    
    
    return 0;
}
#包括 使用名称空间std; //创建了包含三个元素的结构 结构节点 { INTA; int b; INTC; }arr[3]; //比较器函数,用于根据其一个属性“c”值对结构进行排序 布尔比较学生(节点aa、节点bb) { 回报率(aa.c对于(int i=0;i,首先定义一个数据结构来保存值:

typedef struct {
    int dividend, divisor, result;
} intTuple;
然后为C的
qsort

int compare(const intTuple *e1, const intTuple *e2){
    return (e1->result > e2->result)? 1 : 0;
}
然后初始化数据,执行除法并调用
qsort

int main() {
    intTuple tuples[4] = { {96, 8}, {100, 4}, {104, 8}, {108, 16} };
    for (int i = 0; i < 4; i++) {
        tuples[i].result = tuples[i].dividend / tuples[i].divisor;
    }
    qsort(tuples, 4, sizeof(intTuple), compare);
    for (int i = 0; i < 4; i++) {
        printf("%d ", tuples[i].dividend);
    }
}
intmain(){
整数元组[4]={{96,8},{100,4},{104,8},{108,16};
对于(int i=0;i<4;i++){
元组[i]。结果=元组[i]。被除数/元组[i]。除数;
}
qsort(tuples,4,sizeof(intTuple),compare);
对于(int i=0;i<4;i++){
printf(“%d”,元组[i]。被除数);
}
}

测试它。

不要对数组排序,而是对索引排序

#include <stdio.h>
#include <stdlib.h>

int arr1[] = {96, 100, 104, 108};
int arr2[] = {8, 4, 4, 16};
int arr3[] = {12, 25, 26, 9};

int delta(const void *a, const void *b) {
    const int *aa = a;
    const int *bb = b;
    return arr3[*aa] - arr3[*bb];
}

int main(void) {
    int indexes[] = {0, 1, 2, 3};
    qsort(indexes, 4, sizeof (int), delta);

    printf("arr1:");
    for (int k = 0; k < 4; k++) {
        printf(" %d", arr1[indexes[k]]);
    }
    printf("\narr2:");
    for (int k = 0; k < 4; k++) {
        printf(" %d", arr2[indexes[k]]);
    }
    printf("\n");
}
#包括
#包括
int arr1[]={96100104108};
int arr2[]={8,4,4,16};
int arr3[]={12,25,26,9};
整数增量(常数无效*a,常数无效*b){
常数int*aa=a;
常数int*bb=b;
返回arr3[*aa]-arr3[*bb];
}
内部主(空){
int索引[]={0,1,2,3};
qsort(索引,4,sizeof(int),delta);
printf(“arr1:”);
对于(int k=0;k<4;k++){
printf(“%d”,arr1[索引[k]]);
}
printf(“\narr2:”);
对于(int k=0;k<4;k++){
printf(“%d”,arr2[索引[k]]);
}
printf(“\n”);
}

很抱歉,这些全局元素。

创建一个包含三个元素的结构(arr1[i]、arr2[i]、arr3[i])。创建一个结构数组,并根据第三个元素对其进行排序。有关更多详细信息,请参阅此链接。请阅读为什么
C++
回答
C
问题?如何在onlinegdb上查看编译警告和错误?您应该习惯让编译器发出警告,如中所示。好问题!我不知道。我大部分时间都使用Visual studio时间到了,但是
qsort
不起作用,因此我使用了这个在线工具。有一个“共享”选项,所以我想我也可以使用它。