一、冒泡排序
冒泡算法的工作原理:
1.假設(shè)對于一個含有n個元素的組進行升序排列,原則上要進行n-1趟遍歷硫嘶;
2.每一趟遍歷,從第一個數(shù)開始茅坛,將此與其相鄰的數(shù)進行比較音半,如果前者大于后者,就交換這兩個數(shù)的位置贡蓖。在一趟遍歷中曹鸠,這樣的對比將進行(數(shù)組元素個數(shù) - 當前趟數(shù))次。一趟比較過后斥铺,最大的數(shù)將會被排到數(shù)組最末端彻桃;
3.對數(shù)組除去最后一個元素的n-1個元素重復(fù)上面操作,將倒數(shù)第二大的數(shù)排列在n-1的位置晾蜘;
4.以此類推邻眷,直到排列完成。
swift版本示例:
//隨機產(chǎn)生一組20個元素的數(shù)組取值范圍為[20, 40]
var numbersArr = [Int]();
print("隨機產(chǎn)生的一個包含40個元素的數(shù)組:,單前為空\(numbersArr)")
for _ in 0 ..< 20 {
//print(i)
numbersArr.append(Int(arc4random()%41) + 20)
////arc4random產(chǎn)生隨機數(shù)剔交,通過arc4random() 獲取0到x-1之間的整數(shù)的代碼如下:int value = arc4random() % x;
}
print(numbersArr)
//冒泡具體操作
for i in 1 ..< numbersArr.count { ////n個元素比較n-1趟
for j in 0 ..< numbersArr.count-i { ////每趟比較次數(shù) = 數(shù)組元素個數(shù) - 當前趟數(shù)
if numbersArr[j] > numbersArr[j + 1] {
// var temp = numbersArr[j]
// numbersArr[j] = numbersArr[j + 1]
// numbersArr[ j + 1] = temp
numbersArr.swapAt(j, j+1) //swapAt(a,b) isequalTo swap(&a,&b)
}
}
}
print(numbersArr)
二肆饶、選擇排序
選擇排序的工作原理:每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個元素岖常,存放在序列的起始位置驯镊,然后,再從剩余未排序元素中繼續(xù)尋找最小(大)元素板惑,然后放到已排序序列的末尾橄镜。以此類推,直到全部待排序的數(shù)據(jù)元素排完冯乘。 選擇排序是不穩(wěn)定的排序方法洽胶。
算法操作流程:
1.設(shè)數(shù)組內(nèi)存放了n個待排數(shù)字,數(shù)組下標從0開始裆馒,到n-1結(jié)束姊氓;
2.先假設(shè)a[i](i=0)為最小,從數(shù)組的第a[i+1]個元素開始到第n個元素领追,逐一比較他膳,若遇到比之小的則交換;
3.以此類推對i=i+1,i=i+2, i= i+3 ...... i=n-1做如上比較操作绒窑。
OC版本示例:
NSMutableArray * ascendingArr = [NSMutableArray arrayWithObjects:@"32",@"432",@"23",@"54",@"67",@"3",@"767", nil];
for (int i = 0; i < ascendingArr.count; i ++) {
int min = i;
for (int j = i + 1; j < ascendingArr.count; j ++) {
if ([ascendingArr[i] integerValue] > [ascendingArr[j] integerValue]) {
min = j
}
}
if(min != i){
// int temp = [ascendingArr[i] intValue];
//ascendingArr[i] = ascendingArr[j];
//ascendingArr[j] = [NSNumber numberWithInt:temp];
[ascendingArr exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
NSLog(@"%@",ascendingArr);