一、啥是交换排序?
顾名思义,交换排序就是根据两个关键字值的比较结果,不满足次序要求时交换。冒泡排序和快速排序是典型的交换排序算法。其中快速排序是目前最快的排序算法
二、啥是冒泡排序?
冒泡排序是一种最简单的交换排序算法,通过两两比较,逆序交换,使关键字大的像泡泡一样冒出来放在尾部。重复执行冒泡排序,最终得到有序序列。
算法步骤
1).待排序的元素存储在arr[1...n]中,首先第一个元素和第二个元素比较,逆序交换;然后第一个元素和第二个元素比较,依次类推,直到第n-1个元素和第n个元素比较完毕为止。第一趟排序结束,最大的元素在最后.
2).第二趟排序,对前n-1个元素进行冒泡排序,关键字次大的元素在n-1位置
3).重复上述过程,直到某一趟排序中没有交换元素位置,说明序列已经有序
图解
例如,用冒泡排序算法对序列{12,2,16,30}进行非递减排序
1).第一趟排序,两两比较,如果逆序则交换,如图:
| 12 | 2 | 16 | 30 | 原始序列 |
| 2 | 12 | 16 | 30 | 第一次 |
| 2 | 12 | 16 | 30 |
代码实现
void bubblesort(int arr[],int n)//冒泡排序
{
int i,j,tmp,flag = 1;
i = n - 1;
while(i > 0 && flag)
{
flag = 0;
for(j = 0 ; j < i ; ++j)
if(arr[j] > arr[j + 1])
{
flag = 1;
tmp = arr[j];//交换元素
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
--i;
}
}
算法复杂度
(1)时间复杂度
冒泡排序的时间复杂度和初始序列有关,可分为最好情况、最坏情况和平均情况
- 最好情况下,待排序序列本身正序,只需一趟排序,-1次比较,为O(n)
- 最坏情况下,待排序序列本身逆序,需n-1次排序,i-1次比较,总比较次数为
,为O(n^2)
- 平均情况:O(n^2)
(2)空间复杂度
冒泡排序使用了一些辅助空间,如i,j,tmp,flag,为O(1)
(3)稳定性
冒泡排序是稳定的排序算法
冒泡排序是一种简单的交换排序算法,通过两两比较并交换来实现排序。它包括多次遍历元素,每次遍历将最大(或最小)的元素逐渐移到序列末尾。算法步骤涉及相邻元素的比较和交换,直到序列完全有序。冒泡排序的时间复杂度在最好、最坏和平均情况下均为O(n^2),空间复杂度为O(1),且它是稳定的排序算法。
1544

被折叠的 条评论
为什么被折叠?



