OC学习之道:数据结构中几种常见的排序算法:选择排序,插入排序.快速排序

//  Copyright (c) 2015年 童星. All rights reserved.
#import 
   
   
    
    

@interface SortArray : NSObject{
    

}

#pragma  mark---选择排序
-(void)selectSortWithArray:(NSArray *)aData;
#pragma  mark---插入排序
-(void)insertSortWithArray:(NSArray *)aData;
#pragma  mark---快速排序
-(void)quickSortWithArray:(NSArray *)aData;

-(void)quickSortWithArray:(NSMutableArray *)aData left:(NSInteger)left right:(NSInteger)right;
-(void)swapWithData:(NSMutableArray *)aData index1:(NSInteger)index1 index2:(NSInteger)index2;
@end
//  Copyright (c) 2015年 童星. All rights reserved.
@implementation SortArray
-(id)init{
    self  = [super init];
    if (self) {
        
    }
    return self;
}

#pragma  mark---选择排序
-(void)selectSortWithArray:(NSArray *)aData{
    
    NSMutableArray *data = [[NSMutableArray alloc]initWithArray:aData];
    for (int i = 0; i<[data count]; 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(@"选择排序后的结果:%@",[data description]);
    
    
}


#pragma  mark---插入排序
-(void)insertSortWithArray:(NSArray *)aData{
    NSMutableArray *data = [[NSMutableArray alloc]initWithArray:aData];
    for (int i=0; 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(@"插入排序后的结果:%@",[data description]);

}
#pragma  mark---快速排序
-(void)quickSortWithArray:(NSArray *)aData{
    NSMutableArray *data = [[NSMutableArray alloc] initWithArray:aData];
    [self quickSortWithArray:data left:0 right:[aData count]-1];
    NSLog(@"快速排序后的结果:%@",[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)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
//  Copyright (c) 2015年 童星. All rights reserved.
 int main(int argc, const char * argv[])
{

    @autoreleasepool {
 #pragma mark---:数组的选择排序,插入排序和快速排序
 NSMutableArray *data = [[NSMutableArray alloc]initWithCapacity:20];
        for (int i=0; i<20; i++) {
            u_int32_t x = arc4random()%100;
            NSNumber *num = [[NSNumber alloc]initWithInt:x];
            [data addObject:num];
            
        }
        
        NSLog(@"排序前的数据:%@",[data description]);
        
        SortArray *sortArray = [[SortArray alloc]init];
        [sortArray selectSortWithArray:data];
        [sortArray insertSortWithArray:data];
        [sortArray quickSortWithArray:data];
        
            }
    return 0;
}

   
   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值