您的位置:首页 > 移动开发 > IOS开发

ios代码示例 实现快排算法

2016-12-14 16:21 363 查看
快排:快速度排序是经典的divide & conquer (分治算法)

思想:

在数组中取得一个值为标兵

对标兵左右区间进行划分,将比标兵大的放到又边,小的放到左边,倒序反之。

重复上过程,到对比结束

代码如下:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *dataSorce = [[NSMutableArray alloc] initWithObjects:@(6), @(1),@(2),@(5),@(9),@(4),@(3),@(7),nil];
[self quickExhaut:dataSorce WhithLeft:0 AndRight:dataSorce.count-1];
NSLog(@"dataSorce value is%@",dataSorce);

}
-(void)quickExhaut:(NSMutableArray *)dateSource WhithLeft:(NSInteger )left AndRight:(NSInteger)right{
if (left>=right) {
return;
}
NSInteger i = left;
NSInteger j = right;
//标兵值
NSInteger key = [dateSource [i] integerValue];
//查询
while (i<j) {
while (i<j && [dateSource[j] integerValue] >= key) {
j--;
}
//如果小于标兵就放到前面
dateSource[i]= dateSource[j] ;
while (i<j && [dateSource[i] integerValue]<=key) {
i++;
}
dateSource[j] = dateSource[i];
}
//排序基准数左边的
dateSource[i] = @(key);
[self quickExhaut:dateSource WhithLeft:left AndRight:i - 1];
//排序基准数右边的
[self quickExhaut:dateSource WhithLeft:i + 1 AndRight:right];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 算法