#arrays #cocoa
#массивы #какао
Вопрос:
Я новичок в программировании на Mac (т.Е. xcode и cocoa), и я пытаюсь просто выполнить пузырьковую сортировку, и у меня возникают большие трудности с этим.
Цель этого — отфильтровать изображение с помощью медианного фильтра с использованием ядра 9 пикселей. Я беру значения шкалы серого для всех девяти пикселей, а затем пытаюсь поместить их в массив из девяти точек и отсортировать массив, чтобы извлечь среднее значение из девяти (поэтому не имеет значения, использую ли я возрастание или убывание).
Я пытался сохранить значения пикселей (которые являются целыми числами) в a NSMutableArray
, но я действительно понятия не имею, как это сделать или как затем отсортировать их, когда массив заполнен.
// Perform median filter on all images in the stack
for (x = 0; x < [curPix pwidth]; x ){
for (y = 0; y < [curPix pheight]; y ){
float value;
int tLeft, tMid, tRight, cLeft, index, cRight, bLeft, bMid, bRight; // takes in pixel placement
value = tLeft = tMid = tRight = cLeft = index = cRight = bLeft = bMid = bRight = 0;
curPos = y * [curPix pwidth] x;
if (x != 0 amp;amp; y != 0 amp;amp; x != ([curPix pwidth]-1) amp;amp; y != ([curPix pheight]-1)){
//Make kernel for median filter
index = fImage[curPos]; // index pixel
tLeft = fImage[index - [curPix pwidth] - 1]; // top left
tMid = fImage[index - [curPix pwidth]]; // top middle
tRight = fImage[index - [curPix pwidth] 1]; // top right
cLeft = fImage[index - 1]; // center left
cRight = fImage[index 1]; // center right
bLeft = fImage[index [curPix pwidth] - 1]; // bottom left
bMid = fImage[index [curPix pwidth]]; // bottom middle
bRight = fImage[index [curPix pwidth] 1]; // bottom right
// Need to make array, populate with pixels (above), and sort.
// Once sorted, take median value, save it as 'value', and store it as new pixel value
fImage[curPos] = (int) value; // return value to index
}
else {
fImage[curPos] = fImage[curPos];
}
}
}
Ответ №1:
Как мне отсортировать массив целых чисел в cocoa?
int
это тип C, так же, как и в C.
Mac OS X поставляется с рядом функций сортировки в стандартной библиотеке. qsort
, которая является быстрой сортировкой, определяется C; остальные, я думаю, из BSD. Все они находятся на странице руководства qsort.
Каждая из функций принимает массив элементов размером с указатель, поэтому вы захотите использовать long
(или, для большей переносимости, intptr_t
), а не int
для элементов.
Создайте массив C из таких элементов, заполните его вручную, затем выполните сортировку с помощью одной из этих функций и найдите медиану.
Ответ №2:
Чтобы заполнить их в an NS(Mutable)Array
, вам нужно обернуть ваши int
s в экземпляры NSNumber
, например:
NSMutableArray *myArray = [NSMutableArray array];
[myArray addObject:[NSNumber numberWithInt:42]];
Для начала существуют различные методы сортировки результирующего массива:
[myArray sortUsingSelector:@selector(compare:)];
К счастью, здесь не используется BubbleSort.
Ответ №3:
Для начала я бы воздержался от сортировки пузырьками, если вы не сортируете небольшую выборку. Сортировка пузырьками происходит очень медленно. Не будучи экспертом по какао, я не могу вам ничем помочь, кроме как предложить вам изучить встроенные процедуры сортировки массива.
Это для iphone, но может помочь: http://www.iphonedevsdk.com/forum/iphone-sdk-development/61615-how-do-i-sort-30-000-objects.html
Удачи.
Комментарии:
1. Это для сортировки объектов Cocoa, а не
int
s.