双向冒泡排序
版权所有,转载请注明:本文出自学与思编程网
双向冒泡排序是在冒泡排序的基础上改进而来的,其基本思想跟最原始的冒泡排序是一样的,只不过排序过程稍微优化了一点。
我们还是以整数升序排序为例来简单说说这种排序的过程:首先从前往后把最大数移到最后,然后反过来从后往前把最小的一个数移动到数组最前面,这一过程就是第一轮,然后重复这一过程,最终就会把整个数组从小到大排列好。双向冒泡排序要稍微优于传统的冒泡排序,因为双向排序时数组的两头都排序好了,我们只需要处理数组的中间部分即可,而单向即传统的冒泡排序只有尾部的元素是排好序的,这时每轮处理都需要从头一直处理到已经排好序元素的前面一个元素。虽然它在效率上有了点改进,但它也不能大幅度提高其排序的效率,这是由冒泡排序的基本过程所决定了的。下面是代码:
void bubblesort(int a[], int count) //升序
{
int i, left, right;
int t;
int tmp;
left = 0, right = count – 1;
while (left < right) {
for (i = left; i < right; i++) {//大数沉底
if (a[i] > a[i + 1]) {
tmp = a[i];
a[i] = a[i + 1];
a[i + 1] = tmp;
t = i;
}
}
right = t;
for (i = right; i > left; i- -) {//小数上浮
if (a[i - 1] > a[i]) {
tmp = a[i - 1];
a[i - 1] = a[i];
a[i] = tmp;
t = i;
}
}
left = t;
}
return;
}
如果您对这个排序过程不是很清楚,请仔细阅读上面的代码,要做到真正理解才会有所收获。可能平时我们还会遇到其它形式的冒泡排序,但万变不离其宗,只要牢固的掌握了基本思想,相信无论怎么变化,也不难理解。
版权所有,转载请注明:本文出自学与思编程网
