很久沒有來寫博客了怎茫,最近一直在看數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的東西收壕,所以接下來的日子會(huì)持續(xù)給各位簡(jiǎn)友帶來“使用OC寫算法”系列,今天來個(gè)最基礎(chǔ)的,冒泡排序
冒泡排序基本思路
冒泡排序的基本思想是轨蛤,對(duì)相鄰的元素進(jìn)行兩兩比較啼器,順序相反則進(jìn)行交換,這樣俱萍,每一趟會(huì)將最小或最大的元素“浮”到頂端,最終達(dá)到完全有序
冒泡排序OC實(shí)現(xiàn)
這是一個(gè)用于生成一個(gè)隨機(jī)數(shù)組的方法告丢,在以后的文章里面都會(huì)用到
/**
獲取一個(gè)數(shù)組
@param count 數(shù)組個(gè)數(shù)
@param left 隨機(jī)數(shù)范圍起始位置
@param right 隨機(jī)數(shù)范圍結(jié)束位置
@return 隨機(jī)數(shù)數(shù)組
*/
- (NSMutableArray *)randomNumArray:(NSInteger)count randomLeft:(int)left randomRight:(int)right{
NSMutableArray * tempArray = [NSMutableArray array];
for (int i = 0; i < count; i ++) {
int randomNum = arc4random()%(right - left + 1) + left;
[tempArray addObject:@(randomNum)];
}
return tempArray;
}
/**
冒泡排序
@param array 待排序數(shù)組
*/
- (void)bubbleSort:(NSMutableArray *)array {
for (int i = 0; i < array.count; i ++) {
//設(shè)定一個(gè)標(biāo)記枪蘑,若為true,則表示此次循環(huán)沒有進(jìn)行交換岖免,也就是待排序列已經(jīng)有序岳颇,排序已然完成。
BOOL flag = true;
//內(nèi)層循環(huán)
for (int j = 0; j <array.count -1 - i; j++) {
if (array[j] > array[j +1]) {
[array exchangeObjectAtIndex:j withObjectAtIndex:j+1];
flag = NO;
}
}
if (flag) {
break;
}
}
NSLog(@"%@",array);
}
Swift來一波
public static func bubbleSort(){
var array = [10,11,12,34,14]
let count = array.count
for i in 0..<count {
for j in (0..<count - 1 - i){
if array[j] > array[j+1] {
array.swapAt(j, j+1)
}
}
}
print(array)
}
代碼實(shí)踐
NSMutableArray *array = [self randomNumArray:10 randomLeft:1 randomRight:100];
[self bubbleSort:array1];