首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对4个整数进行排序,从小到大

对4个整数进行排序,从小到大
EN

Stack Overflow用户
提问于 2012-01-24 08:12:56
回答 3查看 478关注 0票数 0

假设我有4个整数。

代码语言:javascript
复制
int a = 4;
int b = 2;
int c = 4;
int d = 1;

如何从小到大对这些整数进行排序。输出应该是这样的:d, b, a, c大多数排序方法只给出排序后的整数的值。我需要知道他的名字。

编辑:嗯,我正在写一个AI算法。我有4个整数来存储方向优先级。(如果AI进入一堵墙,它会选择下一个最佳方向)。因此,我需要找到最低的int,如果AI不能以这种方式移动,我选择倒数第二个,依此类推。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-24 08:52:50

这是一种objective-c方法。不幸的是,你不会享受到编写AI部分的乐趣,排序已经内置到库中了。

代码语言:javascript
复制
int north = 1, south = 3, east = 2, west =4;

  NSDictionary * nDict = [NSDictionary dictionaryWithObjectsAndKeys:@"north", @"name", [NSNumber numberWithInt:north], @"value", nil];
  NSDictionary * sDict = [NSDictionary dictionaryWithObjectsAndKeys:@"south", @"name", [NSNumber numberWithInt:south], @"value", nil];
  NSDictionary * eDict = [NSDictionary dictionaryWithObjectsAndKeys:@"east", @"name", [NSNumber numberWithInt:east], @"value", nil];
  NSDictionary * wDict = [NSDictionary dictionaryWithObjectsAndKeys:@"west", @"name", [NSNumber numberWithInt:west], @"value", nil];


  NSArray * toBeSorted = [NSArray arrayWithObjects:nDict,sDict,eDict,wDict,nil];
  NSArray * sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"value" ascending:NO]];
  NSArray * sorted = [toBeSorted sortedArrayUsingDescriptors:sortDescriptors];
  NSLog(@"sorted %@", sorted);

输出

代码语言:javascript
复制
2012-01-23 19:50:21.079 TestEnvironment[19792:207] sorted (
        {
        name = west;
        value = 4;
    },
        {
        name = south;
        value = 3;
    },
        {
        name = east;
        value = 2;
    },
        {
        name = north;
        value = 1;
    }
)

现在,您可以通过以下方式检查最高优先级

代码语言:javascript
复制
NSString * highestPriority = [[sorted objectAtIndex:0] objectForKey:@"name"];

现在,您有了一些可以查找的类(NSArray, NSDictionary, NSSortDescriptor, NSNumber)

票数 2
EN

Stack Overflow用户

发布于 2012-01-24 08:32:00

这里似乎有些混乱;在你的例子中,a不是值4的“名称”,它是一个当前包含4的整数变量的名称。换句话说,"a“不是程序数据的一部分。

我假设您的意思是,您希望使用值作为键对名称/值对进行排序。一种常见的方法是为您的对定义一个类型,创建一个集合,然后对该集合进行排序。

在普通的C中,你可以声明:

代码语言:javascript
复制
typedef struct
{
   char *name;
   int value;
} MyPair;

您可以创建一个这样的数组,并使用标准的C函数进行数组排序,只使用value字段作为键。

在Objective-C中,您可以为您的对象对声明一个类:

代码语言:javascript
复制
@interface MyPair : NSObject
{
   NSString *name;
   int value;
}

// methods/properties

@end

您可以创建MyPair实例的NSMutableArray,然后对数组进行排序,同样,在对排序算法进行比较时,只需使用value属性(或实例变量)即可。

当然,还有其他变体。排序后,可以遍历排序后的数组并显示name字段/属性。

票数 4
EN

Stack Overflow用户

发布于 2012-01-24 08:22:13

您已经标记了这个Objective-C,但是您还没有编写任何建议使用Objective-C的代码。如果您想使用Objective-C,我会将元素放入一个NSMutableArray中(需要将它们转换为NSNumbers ),并让数组对它们进行排序,如here所示。

如果只想将它们放入一个直接的C数组中,可以使用heapsort ()qsort()mergesort()对它们进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8980453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档