冒泡排序
初级版冒泡排序
冒泡排序(Bubble Sort) 一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。冒泡的实现在细节上可以有很多种变化,我们将分别就3种不同的冒泡实现代码,来讲解冒泡排序的思想。这里,我们就先来看看比较容易理解的一段。
void bubble_sort0(int a[],int n) {
for (int i = 0; i < n; ++i) {
for (int j = i+1; j < n; ++j) {
if (a[i] > a[j]) {
swap(a[i], a[j]);
}
}
}
}
这段代码严格意义上说,不算是标准的冒泡排序算法,因为它不满足“ 两两比较相邻记录”的冒泡排序思想,它更应该是最最简单的交换排序而已。它的思路就是让每一个关键字,都和它后面的每一个关键字比较,如果大则交换,这样第一位置的关键字在一次循环后- -定变成最小值。 如图下图所示(图中i以1开始,代码中以0开始):
观察后发现,在排序好1和2的位置后,对其余关键字的排序没有什么帮助(数字3反而还被换到了最后一位)。也就是说,这个算法的效率是非常低的。