在目标C中按字母顺序对字符串进行排序

时间:2014-12-08 20:44:15

标签: ios objective-c

我有一个标签,一个文本字段和一个按钮。用户在文本字段中引入一系列字母,例如, “gcea”,按下按钮,标签文字变为“aceg”。

到目前为止我在.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet UITextField *random;
- (IBAction)ok:(id)sender;

@end

到目前为止我在.m

- (IBAction)ok:(id)sender {


    NSString *order = self.random.text;
    NSInteger compare = order.length;
    NSString *corect = @"abc";

    // will insert all letters when it will actually work:)


    BOOL count = YES;

    for  (int i=0;i<compare;i++)

    {
        if([corect characterAtIndex:i] == [order characterAtIndex:i])

        {
            //do stuff?;


        }

    }


    self.label.text = [NSString stringWithFormat:@"%c", count];



}
@end

那我接下来要做什么呢?我的思维过程是我将我的“正确”字符串与用户通过char放入char中的字符串进行比较,并将结果打印在另一个字符串中。但是我不知道如何写这个,所以有人可以给我一些指示吗?

另外请不要使用任何预定义的方法,我想了解bools&amp;首先是for循环。

我对编程很陌生。

1 个答案:

答案 0 :(得分:0)

我不同意其他海报,你的问题是链接帖子的副本。

有几件事:

首先:排序实际上是一个非常复杂的主题。我建议你阅读关于排序的维基文章。像冒泡排序这样的天真排序算法很容易编写,但非常低效。他们的排序时间往往会与排序的元素数量的平方有关,这对于排序更长的列表来说是个坏消息。不过,学习一种天真的排序算法是值得的。

第二:NSString,它的可变子类NSMutableString,实际上不适合按字符操纵字符串。

创建一个单字符字符串数组的建议可以作为学习练习,或者甚至可以对C字符串进行排序。

您可能希望从一个更简单的问题开始,例如排序C数组。以下是一些示例代码:

//Create an array of mixed-up integers
int array[] = {73, 12, 135, 18, 200, 1, 416};


//an outer loop for indexing into the array starting at the first element and going to 
//the next-to-last item.
for (int outer = 0; outer < sizeof(array)-1; outer++)
{ 

  //An inner loop that starts one past the current outer loop, 
  //and goes to the end of the array
  for (int inner = outer+1; inner< sizeof(array); inner++);
  {
    //If the items at the outer and inner loop indexes are out of order, swap them
    if (array[outer] > array[inner])
    {
      int temp = array[outer];
      array[outer] = array[inner];
      array[inner] = temp;
    }
  }
}

上面的代码是一种糟糕的排序算法。对于n个元素的数组,它总是进行n ^ 2个比较。但是,理解它的作用相当容易。

在标准的计算机科学术语中,这被称为O(n平方)性能,或者只是n平方性能,这是坏消息。

您可以调整上面的代码来对NSString中的字符进行排序,但这会很痛苦。正如其他人所建议的那样,你必须将你的字符串分解为一个可变数组的NSNumbers,它保存字符串中每个字符的值,然后使用上面的代码对数字数组进行排序。

在100个字符的字符串上测试排序算法。看起来很快。然后给它一个10,000个字符的字符串。这需要一段时间。那是因为它必须进行10,000 x 10,000或1亿次比较。

接下来查找类似quicksort或shell排序的类型。这些是更多的工作来弄清楚和实施,但更多,更有效。如果我没记错的话,这两种排序算法通常都具有n * log(n)性能,这是更好的。