一、冒泡排序
冒泡算法的工作原理:
1.假设对于一个含有n个元素的组进行升序排列,原则上要进行n-1趟遍历;
2.每一趟遍历,从第一个数开始,将此与其相邻的数进行比较,如果前者大于后者,就交换这两个数的位置。在一趟遍历中,这样的对比将进行(数组元素个数 - 当前趟数)次。一趟比较过后,最大的数将会被排到数组最末端;
3.对数组除去最后一个元素的n-1个元素重复上面操作,将倒数第二大的数排列在n-1的位置;
4.以此类推,直到排列完成。
swift版本示例:
//随机产生一组20个元素的数组取值范围为[20, 40]
var numbersArr = [Int]();
print("随机产生的一个包含40个元素的数组:,单前为空\(numbersArr)")
for _ in 0 ..< 20 {
//print(i)
numbersArr.append(Int(arc4random()%41) + 20)
////arc4random产生随机数,通过arc4random() 获取0到x-1之间的整数的代码如下:int value = arc4random() % x;
}
print(numbersArr)
//冒泡具体操作
for i in 1 ..< numbersArr.count { ////n个元素比较n-1趟
for j in 0 ..< numbersArr.count-i { ////每趟比较次数 = 数组元素个数 - 当前趟数
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)
二、选择排序
选择排序的工作原理:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
算法操作流程:
1.设数组内存放了n个待排数字,数组下标从0开始,到n-1结束;
2.先假设a[i](i=0)为最小,从数组的第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);
网友评论