C 根据前两个数组中排序的第三个数组重新排列一对数组
假设我有3个数组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[
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
不起作用,因此我使用了这个在线工具。有一个“共享”选项,所以我想我也可以使用它。