2012-01-24 11 views
0

4つの整数があるとします。4つの整数、最小から最大まで

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

どのようにこれらの整数を最小から最大にソートできますか。出力は次のようなものにする必要があります。d, b, a, cソートのほとんどの方法では、ソートされた整数の値しか得られません。私はその名前を知る必要がある。

編集:まあ、私はAIアルゴリズムを書いています。私は方向の優先順位を格納する4 intを持っています。 (AIが壁に入る場合、AIは次の最良の方向を選択します)。だから、私は最低のintを見つける必要があり、AIがそのように動くことができないなら、私は最低のものを選ぶ。

+0

待ち、1ではありません4より大きい – bowlerae

+1

私は疲れている、大丈夫! – Sosumi

+0

あなたが問題に近づいているように感じます(変数名を得ることは役に立たないようですが、あなたはすでに価値があります)。 – Nick

答えて

2

ここでは、目的別アプローチです。残念なことに、あなたは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

ud、辞書ベースのプログラミング。これを適切なクラスにしてください。 –

+0

@DaveDeLong私はコーディング時に適切なクラスを使用しますが、intで開始されたOPを考えると、2-3ページのソリューションにジャンプするつもりはありませんでした。これはobjCの基本的なより一般的なクラスのいくつかにそれらを公開します –

0

あなたはこのObjective-Cにタグをつけたが、 Objective-Cを使用することを提案します。 Objective-Cを使用したい場合は、要素をNSMutableArrayに入れます(NSMutableArrayに変換する必要があります)。hereのように配列をソートします。

あなただけのストレートC配列に入れたい場合は、heapsort()qsort()、またはmergesort()を使用してそれらを並べ替えることができます。

4

ここには混乱があります。あなたの例ではa 4のための「名前」ではない、それは現在、言い換えれば4.「」あなたのプログラムのデータの一部ではありませんが含まれてい変数整数の名前です。

私はあなたが値をキーとしてソートしたい名前/値のペアを持っていることを意味します。これを行う一般的な方法は、ペアのタイプを定義し、コレクションを作成し、コレクションをソートすることです。

あなたが宣言することができ、プレーンCで

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

あなたはこれらの配列を作成し、キーとしてだけvalueフィールドを使用して、配列をソートするための標準C関数を使用して、それを並べ替えることができます。あなたはペアのクラスを宣言することができるObjective-Cで

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

// methods/properties 

@end 

あなたはMyPairのインスタンスのNSMutableArrayを作成し、配列をソートすることができ、再度、あなただけのvalueプロパティ(またはインスタンス変数を使用)ソートアルゴリズムの比較を行うとき。

もちろん、他のバリエーションもあります。並べ替えが完了したら、並べ替えられた配列を反復処理してnameフィールド/プロパティを表示できます。

関連する問題