快速排序法从小到大排序
/**
* 从小到大排序
*
* @param left 0
* @param right 数组的个数
*/
- (void)fastSortLeftIndex:(NSInteger)left WithRightIndex: (NSInteger)right
{
NSInteger i, j;
if(left > right) return;
NSInteger tempModel = [self.dataArr[left] integerValue]; //基准模型
i = left;
j = right;
while (i != j) {
//从右边开始找比基准模型的评分小的模型
while (i<j && [self.dataArr[j] integerValue]>tempModel) {
j--;
}
//从左向右找
while (i < j && [self.dataArr[i] integerValue] <= tempModel) {
i++;
}
//如果左右都找到了就交换模型
if(i < j)
{
NSInteger model_i = [self.dataArr[i] integerValue];
NSInteger model_j = [self.dataArr[j] integerValue];
[self.dataArr replaceObjectAtIndex:i withObject:@(model_j)];
[self.dataArr replaceObjectAtIndex:j withObject:@(model_i)];
}
}
//如果相遇了
self.dataArr[left] = self.dataArr[i];
self.dataArr[i] = @(tempModel);
//第一轮结束之后,采用递归 - 二分法
[self fastSortLeftIndex:left WithRightIndex:i-1];
[self fastSortLeftIndex:i+1 WithRightIndex:right];
return;
//快速排序时间复杂度:N * logN - 所以我比较喜欢快速排序哦
}