2012-01-24 47 views
0

假设我有4个整数。排序4整数,从最小到最大

int a = 4; 
int b = 2; 
int c = 4; 
int d = 1; 

我怎样才能从最小到最大排序这些整数。输出需要是这样的:d, b, a, c大多数排序方法只给我排序整数的值。我需要知道这个名字。

编辑:好的,我正在写一个AI算法。我有4个存储方向优先级的整数。 (如果AI进入墙壁,则选择下一个最佳方向)。所以,我需要找到最低的整数,如果AI不能这样移动,我选择第二个到最低等。

+0

等待,1是不大于4 – bowlerae

+1

我累了,好吧! – Sosumi

+0

感觉就像你以错误的方式接近问题(让变量名看起来毫无用处,你已经有了价值),也许给你想要解决的问题提供更多细节将会有所帮助。 – Nick

回答

2

这是一个客观的c方法。不幸的是,你不会有编写AI部分的乐趣,排序已经建立到库中了。

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); 

输出

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; 
    } 
) 

现在,您可以通过

NSString * highestPriority = [[sorted objectAtIndex:0] objectForKey:@"name"]; 

现在检查的最高优先级你有一些类,你可以看看(NSArray, NSDictionary, NSSortDescriptor, NSNumber

+0

呃,基于字典的编程。帮你一个忙,让这个课程适合你。 –

+0

@DaveDeLong我在编码时使用了适当的类,但考虑到OP是以int开头的,我并不打算跳到2-3页的解决方案。这暴露了他们在objC中的一些基本更常见的类 –

0

您已经标记了这个Objective-C,但是您没有编写任何建议使用Objective-C。如果你想使用Objective-C,我会把元素放到一个NSMutableArray中(他们需要被转换成NSNumbers来做到这一点),然后让数组排序它们,如here所示。

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

4

这里似乎有些混淆;在您的示例a不是“名称”为 4,它是一个整数变量目前包含4。换句话说的名称“a”为不数据程序的的一部分。

我假设你的意思是你有名字/值对,你希望用值作为键来排序。一个常见的方法是为你的配对定义一个类型,创建一个集合,并对集合进行排序。

在纯C,你可以声明:

typedef struct 
{ 
    char *name; 
    int value; 
} MyPair; 

您可以创建这些数组,并使用标准的C函数用于数组排序排序,仅使用value领域为重点。

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

@interface MyPair : NSObject 
{ 
    NSString *name; 
    int value; 
} 

// methods/properties 

@end 

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

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