我是全新的Mac编程(即xcode和cocoa),我试图简单地执行冒泡排序,我有很多困难与此。
这样做的目的是通过使用9像素内核来使用中值过滤器过滤图像。我接受所有九个像素的灰度值,然后我试图把它们放在一个九点数组中,并对数组进行排序以提取九个的中值(所以如果我使用升序或降序都没关系)。
我一直试图将像素值(这是整数)存储到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 && y != 0 && x != ([curPix pwidth]-1) && 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];
}
}
}
如何在cocoa中对int数组进行排序?
int
是C类型,因此,与C中的方式相同。
Mac OS X在标准库中提供了许多排序函数。qsort
是快速排序,定义为C;其他的,我想,来自BSD。
每个函数都接受一个指针大小的元素数组,因此您将希望使用long
(或者为了更具可移植性,使用intptr_t
)而不是int
来处理这些元素。
为这些元素创建一个C数组,手动填充,然后使用其中一个函数进行排序并找到中位数。
要将它们填充到NS(Mutable)Array
中,您需要将int
包装在NSNumber
的实例中,例如:
NSMutableArray *myArray = [NSMutableArray array];
[myArray addObject:[NSNumber numberWithInt:42]];
有各种方法来对结果数组进行排序,让您开始:
[myArray sortUsingSelector:@selector(compare:)];
幸运的是,这里没有使用BubbleSort
首先,除非您对小样本进行排序,否则我会避免使用冒泡排序。冒泡排序非常慢。作为一个cocoa专家,除了建议你看看内置的数组排序例程之外,我不能给你太多帮助。
这是针对iphone的,但可能会有所帮助:http://www.iphonedevsdk.com/forum/iphone - sdk - development/61615如何-做-我- - - - - - - 30 - 000 objects.html
好运。