Objective-c realize Bubble, select, insert, fast sort algorithm __ algorithm

Source: Internet
Author: User
The first is the header file:
Objective-c code
#import <Foundation / Foundation.h>
  
@interface Sort: NSObject {
      
}
//Bubble Sort  
-(void) bunbleSortWithArray: (NSArray *) aData;
// Select sort
-(void) selectSortWithArray: (NSArray *) aData;
// Insert sort
-(void) insertSortWithArray: (NSArray *) aData;
// Quick sort, an improvement on bubble sort
-(void) quickSortWithArray: (NSArray *) aData;
-(void) swapWithData: (NSMutableArray *) aData index1: (NSInteger) index1 index2: (NSInteger) index2;
@end

Then comes the implementation:
Objective-c code
#import "Sort.h"
  
@interface Sort ()
-(void) quickSortWithArray: (NSArray *) aData left: (NSInteger) left right: (NSInteger) right;
@end
  
@implementation Sort
  
-(id) init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }
      
    return self;
}
  
-(void) bunbleSortWithArray: (NSArray *) aData {
    NSMutableArray * data = [[NSMutableArray alloc] initWithArray: aData];
    for (int i = 0; i <[data count] -1; i ++) {
        for (int j = 0; j <[data count] -1-i; j ++) {
            if ([data objectAtIndex: j]> [data objectAtIndex: j + 1]) {
                [self swapWithData: data index1: j index2: j + 1];
            }
        }
    }
    NSLog (@ "Bubble sorted results:% @", [data description]);
}
  
-(void) selectSortWithArray: (NSArray *) aData {
    NSMutableArray * data = [[NSMutableArray alloc] initWithArray: aData];
    for (int i = 0; i <[data count] -1; i ++) {
        int m = i;
        for (int j = i + 1; j <[data count]; j ++) {
            if ([data objectAtIndex: j] <[data objectAtIndex: m]) {
                m = j;
            }
        }
        if (m! = i) {
            [self swapWithData: data index1: m index2: i];
        }
    }
    NSLog (@ "Select sorted results:% @", [data description]);
}
  
-(void) insertSortWithArray: (NSArray *) aData {
    NSMutableArray * data = [[NSMutableArray alloc] initWithArray: aData];
    for (int i = 1; i <[data count]; i ++) {
        id tmp = [data objectAtIndex: i];
        int j = i-1;
        while (j! = -1 && [data objectAtIndex: j]> tmp) {
            [data replaceObjectAtIndex: j + 1 withObject: [data objectAtIndex: j]];
            j--;
        }
        [data replaceObjectAtIndex: j + 1 withObject: tmp];
    }
    NSLog (@ "Insert sorted result:% @", [data description]);
}
  
-(void) quickSortWithArray: (NSArray *) aData {
    NSMutableArray * data = [[NSMutableArray alloc] initWithArray: aData];
    [self quickSortWithArray: data left: 0 right: [aData count] -1];
    NSLog (@ "Quick sorted result:% @", [data description]);
      
}
  
-(void) quickSortWithArray: (NSMutableArray *) aData left: (NSInteger) left right: (NSInteger) right {
    if (right> left) {
        NSInteger i = left;
        NSInteger j = right + 1;
        while (true) {
            while (i + 1 <[aData count] && [aData objectAtIndex: ++ i] <[aData objectAtIndex: left]);
            while (j-1> -1 && [aData objectAtIndex:-j]> [aData objectAtIndex: left]);
            if (i> = j) {
                break;
            }
            [self swapWithData: aData index1: i index2: j];
        }
        [self swapWithData: aData index1: left index2: j];
        [self quickSortWithArray: aData left: left right: j-1];
        [self quickSortWithArray: aData left: j + 1 right: right];
    }
}
  
  
//-(void) dealloc {
//}
  
-(void) swapWithData: (NSMutableArray *) aData index1: (NSInteger) index1 index2: (NSInteger) index2 {
    NSNumber * tmp = [aData objectAtIndex: index1];
    [aData replaceObjectAtIndex: index1 withObject: [aData objectAtIndex: index2]];
    [aData replaceObjectAtIndex: index2 withObject: tmp];
}
  
@end

Then write the main function test:
Objective-c code
#import <Foundation / Foundation.h>
#import "Sort.h"
  
#define kSize 20
#define kMax 100
  
int main (int argc, const char * argv [])
{
      
    // insert code here ...
    NSLog (@ "Hello, World!");
      
    NSMutableArray * data = [[NSMutableArray alloc] initWithCapacity: kSize];
      
    for (int i = 0; i <kSize; i ++) {
        u_int32_t x = arc4random ()% kMax; // 0 ~ kMax
        NSNumber * num = [[NSNumber alloc] initWithInt: x];
        [data addObject: num];
    }
      
    NSLog (@ "Data before sorting:% @", [data description]);
      
    Sort * sort = [[Sort alloc] init];
    [sort bunbleSortWithArray: data];
    [sort selectSortWithArray: data];
    [sort insertSortWithArray: data];
    [sort quickSortWithArray: data];
    return 0;
}
 Go from http://jasonshieh.iteye.com/blog/2022553
Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.