1.获取基数
2.右边往左找,比基数小的放到左边
3.左边往右找,比基数大的放到右边
4.将基数放在正确位置
5.递归查找
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@(3),@(77),@(5),@(23),@(1),@(34),@(65),@(443), nil];
[self quickSort:array withLeftIndex:0 andRightIndex:array.count - 1];
}
- (void)quickSort:(NSMutableArray *)array withLeftIndex:(NSInteger)left andRightIndex:(NSInteger )right{
if (left >= right) {
for (int i = 0; i < array.count; i++) {
NSLog(@"%@",array[i]);
}
return;
}
NSInteger i = left;
NSInteger j = right;
NSInteger key = [array[i] integerValue];
while (i < j) {
//从右往左找,如果比基数大就往前继续找
while (i < j && [array[j] integerValue]>= key) {
j--;
}
//如果比基数小,放到i位置去
array[i] = array[j];
//从左往右找,如果比基数小就继续
while (i < j && [array[i] integerValue] <= key) {
i++;
}
//如果比基数大,就放到j位置去
array[j] = array[i];
}
array[i] = @(key);
[self quickSort:array withLeftIndex:left andRightIndex:i - 1];
[self quickSort:array withLeftIndex:i + 1 andRightIndex:right];
}