1. 冒泡排序
冒泡排序故名思意就是水里面的泡泡总是大的更快的浮到达水面,冒泡排序的本质就是交换,即每次都是通过交换的方式把当前的剩余元素的最大值排序到一端
例如:
现在有一个数组a,分别为a[0]=3,a[1]=4,a[2]=1,a[3]=8,a[4]=0,要求把他们按升序排列
分析a数组得出其初始序列{3,4,1,8,0}
第一趟排序:
a[0]与a[1]比较 a[0]比a[1]小所以a[0]与a[1]不交换顺序现在a的顺序为了{3,4,1,8,0}
a[1]与a[2]比较a[1]比a[2]大所以a[1]与a[2]交换顺序现在a的顺序变为了{3,1,4,8,0}
a[2]与a[3]比较a[2]比a[3]小所以a[2]与a[3]不交换顺序现在a的顺序变为了{3,1,4,8,0}
a[3]与a[4]比较a[3]比a[4]大所以a[3]与a[4]交换顺序现在a的顺序变为了{3,1,4,0,8}
即第一趟排序完成此时找出最大数为8并把8排至a[4]位置即即未排好的序列的最后,排序后的顺序为{3,1,4,0,8}此时不需要在比较a[3]与a[4]的大小只需要对a[0],a[1],a[2],a[3]进行排序 第二次比较次数减1为3次
第二趟排序:
a[0]与a[1]比较 a[0]比a[1]小所以a[0]与a[1]不交换顺序现在a的顺序为了{3,4,1,0,8}
a[1]与a[2]比较a[1]比a[2]小所以a[1]与a[2]不交换顺序现在a的顺序变为了{3,1,4,0,8}
a[2]与a[3]比较a[2]比a[3]大所以a[2]与a[3]交换顺序现在a的顺序变为了{3,1,0,4,8}
即第二趟排序完成此时找出最大数为4并把4排至a[3]位置即未排好的序列的最后,排序后的顺序为{3,1,0,4,8}此时不需要在比较a[2]与a[3]的大小只需要对a[0],a[1],a[2],进行排序 第三次比较次数减1为2次
第三趟排序:
a[0]与a[1]比较 a[0]比a[1]大所以a[0]与a[1]交换顺序现在a的顺序为了{1,3,0,4,8}
a[1]与a[2]比较a[1]比a[2]大所以a[1]与a[2]交换顺序现在a的顺序变为了{1,0,3,4,8}
即第三趟排序完成此时找出最大数为3并把3排至a[2]位置即未排好的序列的最后,排序后的顺序为{1,0,3,4,8}此时不需要在比较a[1]与a[2]的大小只需要对a[0],a[1],a[2],进行排序 第三次比较次数减1为2次
第四趟排序:
a[0]与a[1]比较 a[0]比a[1]大所以a[0]与a[1]交换顺序现在a的顺序变为了{0,1,3,4,8}
即排序完成
冒泡排序的时间复杂度为O(n^2)
空间复杂度:O(1)
冒泡排序是一种比较稳定的排序方法
代码如下:
int a[4]={3,4,1,8,0};
int flag = 1;
for (int i = 4; i > 0 && flag == 1; i + +){
flag == 0;
for (int j = 0, j < 4 - i, j++){
if (a[j] > a[j + 1]){
int max;
max = a[i - 1];
a[j - 1] = a[j];
a[j] = max;
flag == 1;
}
}
}