2012-01-24 44 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字段/屬性。