冒泡排序是通过数据比较大小交换位置的排序。阅读代码更有助于理解。查看完整代码
一.算法思想:
1、冒泡排序的基本思想就是:从第一个元素开始,进行两两比较,大(小)元素交换元素位置, 直到最后将最大(小)的数据元素交换到最后,从而成为有序序列的一部分.然后一直循环,直到所有数据元素都排好序。算法的核心在于每次通过两两比较交换位置,选出里面最大(小)的数据元素放到队尾。
2、算法过程步骤: 1)、比较相邻的两个元素,如果第一个大于(小于)第二个,就交换这个两个元素。2)、一直循环比较,直到最后一个元素,第一轮比较完成后,最大(最小)的元素会被放在最后。3)、重复上述操作,直到已排好的元素。
3、算法实例:
算法实例二.核心代码:
+ (void)bubbleWithArray:(NSMutableArray *)originArr
{
int i,j;
for (i = 0; i < originArr.count; i++) {
for (j = 0; j < originArr.count - i -1; j++) {
if (originArr[j] > originArr[j + 1]) {
id temp = originArr[j];
originArr[j] = originArr[j+1];
originArr[j+1] = temp;
}
}
}
三.算法时间、空间复杂度、稳定性
1、算法时间:
1)、如果元素都是正序排序的,总比较次数为n-1,移动次数为0,最好时间复杂度为O(n).
2)、如果元素逆序排序时,冒泡排序总的比较次数为n(n-1)/2,移动次数为3n(n-1)/2次,在最坏情况下的时间复杂度为O(n^2),所以平均时间复杂度为O(n^2);
2、空间复杂度:冒泡排序排序过程中需要一个临时变量进行两两交换,所需要的额外空间为1,因此空间复杂度为O(1)。
3、稳定性:冒泡排序在排序过程中,元素两两交换时,相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
网友评论