Objective c 需要按一个键数组对3个数组进行排序

Objective c 需要按一个键数组对3个数组进行排序,objective-c,sorting,arrays,Objective C,Sorting,Arrays,我正在尝试在iphone的objective c中按一个键数组对3个数组进行排序,下面是一个帮助解决此问题的示例 Array 1 Array 2 Array 3 Array 4 1 15 21 7 3 12 8 9 6 7 8 0 2 3

我正在尝试在iphone的objective c中按一个键数组对3个数组进行排序,下面是一个帮助解决此问题的示例

Array 1      Array 2      Array 3     Array 4
1            15           21          7
3            12           8           9
6            7            8           0 
2            3            4           8
分类时,我希望这个看起来像

Array 1      Array 2      Array 3     Array 4
1            15           21          7
2            3            4           8
3            12           8           9
6            7            8           0 
因此,数组2、3、4在排序时与数组1一起移动

目前我正在使用冒泡排序来实现这一点,但它的滞后性太差,以至于应用程序崩溃。 我使用的代码是

int flag = 0;
int i = 0;
int temp = 0;
do 
{
    flag=1;
    for(i = 0; i < distancenumber; i++)
    {
        if(distance[i] > distance[i+1])
        {
            temp = distance[i];
            distance[i]=distance[i + 1];
            distance[i + 1]=temp;

            temp = FlowerarrayNumber[i];
            FlowerarrayNumber[i] = FlowerarrayNumber[i+1];
            FlowerarrayNumber[i + 1] = temp;

            temp = BeearrayNumber[i];
            BeearrayNumber[i] = BeearrayNumber[i + 1];
            BeearrayNumber[i + 1] = temp;
            flag=0;
        }
    }

}while (flag==0);
int标志=0;
int i=0;
内部温度=0;
做
{
flag=1;
对于(i=0;i距离[i+1])
{
温度=距离[i];
距离[i]=距离[i+1];
距离[i+1]=温度;
温度=花阵列编号[i];
FlowerarrayNumber[i]=FlowerarrayNumber[i+1];
花卉阵列编号[i+1]=温度;
温度=蜂房编号[i];
BeearrayNumber[i]=BeearrayNumber[i+1];
BeearrayNumber[i+1]=温度;
flag=0;
}
}
}while(flag==0);
其中distance number是所有数组中的元素数量,distance是数组1或my key数组

另外两个正在排序

如果有人能帮我得到一个合并排序(或者更快的东西,它在iPhone上运行,所以它需要快速和轻巧)来做这件事,那将是非常好的。我无法理解递归在这个方法中是如何工作的,因此很难让代码正常工作。
如果您能提供任何帮助,我们将不胜感激。

难道您不能简单地构建一个数组,使每个项目都包含一个数组吗


然后简单地根据数组中的第一个项对数组进行排序,或者使用一个简单的结构来保存一个项和数组。

难道不能简单地将数组结构为每个项都保存一个数组吗


然后,只需根据数组中的第一个项对数组进行排序,或者使用一个简单的结构来保存一个项和数组。

这不是一个特定于c的客观问题。这是一个算法问题

  • 首先对第一个数组进行排序
  • 循环遍历第一个数组并找到每个数字的索引
  • 然后在第二个数组中检索与步骤2中的索引对应的值
  • 构造一个新数组,保存步骤3中的结果
  • 对其他阵列也重复步骤2、3、4

  • 这不是一个客观的具体问题。这是一个算法问题

  • 首先对第一个数组进行排序
  • 循环遍历第一个数组并找到每个数字的索引
  • 然后在第二个数组中检索与步骤2中的索引对应的值
  • 构造一个新数组,保存步骤3中的结果
  • 对其他阵列也重复步骤2、3、4

  • 我只是在这里大声思考,但是如果你所有的数组都是对应的(即,<代码> BeaRayNoth[x] < /C> >对应于 FuffelRayayNo[x] < /Cord>,这对应于List[x] < /Cord>,那么你可以考虑使用一个结构数组而不是独立数组。例如:

    typedef struct
    {
        int flowerNumber;
        int beeNumber;
        float distance;
    } BeeFlowerData;
    
    #define MAX_BEE_FLOWER_DATA (100)
    
    BeeFlowerData allBeeFlowers[MAX_BEE_FLOWER_DATA];
    
    然后,您可以使用POSIX
    qsort
    进行排序:

    int BeeFlowerComparator(const void *l, const void *r)
    {
        const BeeFlowerData *left = l;
        const BeeFlowerData *right = r;
    
        if (left->distance > right->distance)
            return 1;
        else if (left->distance < right->distance)
            return -1;
        else 
            return 0;
    }
    
    
    // somewhere in your class:
    - (void) sort
    {
        qsort (allBeeFlowers, MAX_BEE_FLOWER_DATA, sizeof(BeeFlowerData), BeeFlowerComparator);
    }
    
    int比较器(const void*l,const void*r)
    {
    常量数据*左=l;
    常量数据*右=r;
    如果(左->距离>右->距离)
    返回1;
    否则如果(左->距离<右->距离)
    返回-1;
    其他的
    返回0;
    }
    //在你们班的某个地方:
    -(无效)排序
    {
    qsort(所有蜂花、最大蜂花数据、sizeof(蜂花数据)、蜂花比较器);
    }
    

    我只是在这里大声思考,但是如果所有的数组都是对应的(即<代码> BeaRayNoth[x] < /Case>对应于<代码> FuffelRayayNo[x] < /代码>,它对应于<代码>距离[x] < /代码>,那么你可以考虑使用一个结构数组而不是独立数组。例如:

    typedef struct
    {
        int flowerNumber;
        int beeNumber;
        float distance;
    } BeeFlowerData;
    
    #define MAX_BEE_FLOWER_DATA (100)
    
    BeeFlowerData allBeeFlowers[MAX_BEE_FLOWER_DATA];
    
    然后,您可以使用POSIX
    qsort
    进行排序:

    int BeeFlowerComparator(const void *l, const void *r)
    {
        const BeeFlowerData *left = l;
        const BeeFlowerData *right = r;
    
        if (left->distance > right->distance)
            return 1;
        else if (left->distance < right->distance)
            return -1;
        else 
            return 0;
    }
    
    
    // somewhere in your class:
    - (void) sort
    {
        qsort (allBeeFlowers, MAX_BEE_FLOWER_DATA, sizeof(BeeFlowerData), BeeFlowerComparator);
    }
    
    int比较器(const void*l,const void*r)
    {
    常量数据*左=l;
    常量数据*右=r;
    如果(左->距离>右->距离)
    返回1;
    否则如果(左->距离<右->距离)
    返回-1;
    其他的
    返回0;
    }
    //在你们班的某个地方:
    -(无效)排序
    {
    qsort(所有蜂花、最大蜂花数据、sizeof(蜂花数据)、蜂花比较器);
    }
    
    我不敢相信还没有人建议将它们包装在对象中。这相当琐碎:

    //MyObject.h
    @interface MyObject : NSObject {
      int a;
      int b;
      int c;
      int d;
    }
    @property int a;
    @property int b;
    @property int c;
    @property int d;
    @end
    
    //MyObject.m
    @implementation MyObject
    @synthesize a, b, c, d;
    @end
    
    //Elsewhere:
    
    MyObject * m = [[MyObject alloc] init];
    [m setA:1];
    [m setB:15];
    [m setC:21];
    [m setD:7];
    
    [myMutableArray addObject:m];
    [m release];
    //... do that for the rest of the sets of numbers
    
    NSSortDescriptor * sortByA = [NSSortDescriptor sortDescriptorWithKey:@"a" ascending:YES];
    [myMutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortByA]];
    

    当您这样做时,您将拥有一个数组,但该数组中的对象将按其“a”值升序排序。

    我不敢相信还没有人建议将它们包装到对象中。这相当琐碎:

    //MyObject.h
    @interface MyObject : NSObject {
      int a;
      int b;
      int c;
      int d;
    }
    @property int a;
    @property int b;
    @property int c;
    @property int d;
    @end
    
    //MyObject.m
    @implementation MyObject
    @synthesize a, b, c, d;
    @end
    
    //Elsewhere:
    
    MyObject * m = [[MyObject alloc] init];
    [m setA:1];
    [m setB:15];
    [m setC:21];
    [m setD:7];
    
    [myMutableArray addObject:m];
    [m release];
    //... do that for the rest of the sets of numbers
    
    NSSortDescriptor * sortByA = [NSSortDescriptor sortDescriptorWithKey:@"a" ascending:YES];
    [myMutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortByA]];
    

    当您这样做时,您将有一个数组,但该数组中的对象将按其“a”值按升序排序。

    您的数组有多大?这里没有任何特定于Objective-C的内容…我是否遗漏了什么,或者您应该只遍历到距离编号-1。。。你在最后一个星期溢出了数组item@dreamlaxiPhone的要求暗示了Objective-C的特殊性(当然,这可能包括C)您的阵列有多大?这里没有Objective-C的特殊性…我是否遗漏了什么,或者您应该只遍历到距离1。。。你在最后一个星期溢出了数组item@dreamlaxiPhone的要求暗示了Objective-C的特殊性(当然,这可能包括C)