Objective-c realize Bubble, select, insert, fast sort algorithm __ algorithm
Last Update:2018-07-25
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