一、冒泡排序回顾
- 从头开始、比较每一个相邻元素,如果第一个比第二个大、交换
- 一轮结束、末尾的最大
- 忽略1中找到的最大元素,重复执行1步骤、直到所有元素有序
- 优化:记录已经尾部局部已经有序,记录其位置,减少比较次数,提高效率
// 1. 原始版
- (NSArray *)sortByArray:(NSArray *)pendingArray {
NSMutableArray *array = [NSMutableArray arrayWithArray:pendingArray];
for (int i = 0; i < array.count; i++) {
for (int j = 1; j < array.count; j++) {
if ([array[j] intValue] < [array[j - 1] intValue]) {
[self swapElement:array index:j];
}
}
}
return [super sortByArray:array];
}
// 2. 改进版
- (NSArray *)sortModifiedByArray:(NSArray *)pendingArray {
NSMutableArray *array = [NSMutableArray arrayWithArray:pendingArray];
for (NSUInteger end = array.count; end > 0; end--) {
NSUInteger sortedIndex = 1;
for (NSUInteger begin = 1; begin < end; begin++) {
if ([self compareValues:array index:begin]) {
[self swapElement:array index:begin];
sortedIndex = begin; // 记录要比较的起始位置,这里不能放到外面
}
}
// 这里是将排好序的下标赋值给要遍历的最后一个值
end = sortedIndex;
}
return [super sortModifiedByArray:array];
}
- (BOOL)compareValues:(NSArray *)array index:(NSUInteger)index {
return [array[index] intValue] < [array[index - 1] intValue];
}
- (void)swapElement:(NSMutableArray *)array index:(NSUInteger)index {
id temp = array[index];
array[index] = array[index - 1];
array[index - 1] = temp;
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。