如何在cocoa中对整型数组进行排序



我是全新的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

好运。

最新更新