基本思想
冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
初级冒泡排序
从数组中取出一个元素和数组中其他元素比较,如果反序则交换
/**
* 初级冒泡排序算法
*
* @param dataArray 要排序的数据
*
* @return 已排序的数据
*/
+ (NSArray *)bubbleSort:(NSArray *)dataArray {
NSMutableArray *resultArray = [NSMutableArray arrayWithArray:dataArray];
for (NSInteger i; i < resultArray.count; i ++) {
for (NSInteger j = i + 1; j < resultArray.count; j ++) {
if (resultArray[i] > resultArray[j]) {//如果 resultArray[i] > resultArray[j] 则交换位置
[resultArray exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
NSLog(@"i=%ld array:%@",(long)i,resultArray);
}
return [resultArray copy];
}
中级冒泡排序
从数组最后一个元素开始依次比较相邻的两个元素,如果反序则交换
/**
* 中级冒泡排序算法
*
* @param dataArray 要排序的数据
*
* @return 已排序的数据
*/
+ (NSArray *)bubbleSort_2:(NSArray *)dataArray {
NSMutableArray *resultArray = [NSMutableArray arrayWithArray:dataArray];
for (NSInteger i = 0; i < resultArray.count; i ++) {
for (NSInteger j = resultArray.count - 1; j > i; j --) {
if (resultArray[j] < resultArray[j - 1]) {
[resultArray exchangeObjectAtIndex:j withObjectAtIndex:j-1];
}
}
NSLog(@"i=%ld array:%@",(long)i,resultArray);
}
return [resultArray copy];
}
高级冒泡排序
设置一个标志,从数组最后一个元素开始依次比较相邻的两个元素,如果反序则交换,每次交换后更改标志,一次循环结束后,如果没有更改标志说明已经排序完成则停止循环
/**
* 高级冒泡排序算法
*
* @param dataArray 要排序的数据
*
* @return 已排序的数据
*/
+ (NSArray *)bubbleSort_3:(NSArray *)dataArray {
NSMutableArray *resultArray = [NSMutableArray arrayWithArray:dataArray];
BOOL changeFlag;
for (NSInteger i = 0; i < resultArray.count; i ++) {
changeFlag = NO;
for (NSInteger j = resultArray.count - 1; j > i; j --) {
if (resultArray[j] < resultArray[j - 1]) {
changeFlag = YES;
[resultArray exchangeObjectAtIndex:j withObjectAtIndex:j-1];
}
}
NSLog(@"i=%ld array:%@",(long)i,resultArray);
if (!changeFlag) {
break;
}
}
return [resultArray copy];
}
网友评论