2012-01-24 2 views
0

Предположим, у меня есть 4 целых числа.Сортировка 4 ints, от маленьких до крупнейших

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

Как я могу отсортировать эти целые числа от самых маленьких до больших. Результат должен быть примерно таким: d, b, a, c Большинство методов сортировки дают мне только значение отсортированного целого числа. Мне нужно знать это имя.

Редактировать: Ну, я пишу алгоритм ИИ. У меня есть 4 ints, которые хранят приоритет направления. (Если ИИ входит в стену, он выбирает следующее лучшее направление). Итак, мне нужно найти самый низкий int, и если ИИ не может двигаться таким образом, я выбираю второй, самый низкий и т. Д.

+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

ugh, словарь на основе программирования. сделайте себе одолжение и сделайте это подходящим классом. –

+0

@DaveDeLong Я использую правильные классы при кодировании, но, учитывая, что OP начался с ints, я не собирался переходить на 2-3-страничное решение. Это предоставляет их некоторым из основных более общих классов в objC –

0

Вы отметили эту Objective-C, но вы ничего не писали, что предлагает использовать Objective-C. Если вы хотите использовать Objective-C, я бы поместил элементы в NSMutableArray (они должны быть преобразованы в NSNumbers для этого), и их сортировка массива будет выглядеть, как показано here.

Если вы просто хотите разместить их в прямом массиве C, вы можете отсортировать их с помощью heapsort(), qsort(), или mergesort().

4

Здесь, похоже, есть путаница; в вашем примере a не «имя» для значения 4, это имя из целочисленных переменной которая в настоящее время содержит 4. Других слов «а» не является частью данных вашей программы.

Я полагаю, вы имеете в виду, что у вас есть пары имя/значение, которые вы хотите сортировать, используя значение в качестве ключа. Обычный способ сделать это - определить тип для вашей пары, создать коллекцию и отсортировать коллекцию.

В равнинных C вы можете объявить:

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

Вы можете создать массив из них и сортировать его с помощью стандартных функций C для сортировки массива, используя только value поле в качестве ключа.

В Objective-C вы можете объявить класс для вашей пары:

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

// methods/properties 

@end 

Вы можете создать NSMutableArray экземпляров MyPair, а затем отсортировать массив, снова вы просто использовать value свойство (или переменный экземпляр) при выполнении сравнений для алгоритма сортировки.

Есть, конечно, другие варианты. После сортировки вы можете перебирать отсортированный массив и отображать поле/свойство name.