iOS 算法常用总结

一、冒泡排序

冒泡算法的工作原理:
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);

三、快速排序


四、归并排序


五、二分查找算法


六、链表翻转(链表逆序)


七、冒泡排序


八、冒泡排序


九、冒泡排序


十、冒泡排序

你可能感兴趣的:(iOS 算法常用总结)