快速排序
快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多
冒泡排序
- (void)test{
NSMutableArray *array = @[@20,@18,@0,@12,@3,@22,@8,@24,@30,@9].mutableCopy;
// [self quickSortArray:array leftIndex:0 rightIndex:array.count - 1];
[self bubbleSortWithArray:array];
NSLog(@"%@",array);
}
//快速排序
- (void)quickSortArray:(NSMutableArray *)sortArray leftIndex:(NSInteger)leftIndex rightIndex:(NSInteger)rightIndex{
//如果左边的大于右边的就返回
if (leftIndex >= rightIndex) {
return;
}
NSInteger i = leftIndex;
NSInteger j = rightIndex;
//记录的基准数key
NSInteger key = [sortArray[i] integerValue];
while (i < j) {
//从右边j开始找比Key基数小的指
while (i < j && [sortArray[j] integerValue] >= key) {//如果比基数大就继续查找
j--;
}
//如果比基数小,就将查到的小值和i交换位置
sortArray[i] = sortArray[j];
//当在右边查找到一个比基准数小的值时,就从i开始往后找比基准数大的值
while (i < j && [sortArray[i] integerValue] <= key) {////如果比基准数小,继续查找
i++;
}
//如果比基准数大,则将查找到的大值调换到j的位置
sortArray[j] = sortArray[i];
}
//将基准数放到正确的位置
sortArray[i] = @(key);
/**** 递归排序 ***/
//排序基准数左边的
[self quickSortArray:sortArray leftIndex:leftIndex rightIndex:i - 1];
[self quickSortArray:sortArray leftIndex:i+1 rightIndex:rightIndex];
}
//冒泡排序
- (void)bubbleSortWithArray:(NSMutableArray *)sortArray{
for (int i = 0; i < sortArray.count - 1; i++) {
for (int j = 0; j < sortArray.count - 1 - i; j++) {
if ([sortArray[j] integerValue] > [sortArray[j + 1] integerValue]) {
[sortArray exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
}
}
}
// for (int i = 0; i < sortArray.count; i++) {
// for (int j = i + 1; j < sortArray.count; j++) {
//
// if ([sortArray[i] integerValue] > [sortArray[j] integerValue]) {
// [sortArray exchangeObjectAtIndex:i withObjectAtIndex:j];
// }
// }
// }
}
网友评论