数据结构排序算法之——冒泡排序(Bubble Sort)
代码很多地方借鉴了 http://my.csdn.net/MoreWindows 他的思想,
本人认为该作者已经写的很好了,只是在他的基础上加入了一些自己的理解和说明
如果涉及到版权的问题,请联系我的邮箱,我会尽快删除
冒泡排序是一种简单的稳定的排序算法。
冒泡排序想关链接:
维基百科: https://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F
百度百科:http://baike.baidu.com/view/254413.htm
参考博客 :http://blog.csdn.net/morewindows/article/details/6657829
基本算法思想:
比较相邻的两个数据,如果数据之间满足整体的要求(从小到大或者从大到小)则交换当前的两个元素的值,直到整体有序
代码展示
// 由小到大
void Bubble_Sort(int array[], int arrayLen)
{
for (int i = 0; i < arrayLen; ++i)
{
// 内循环每执行一圈,后面有序的部分就会增加一个 所以内循环的次数为 arrayLen-1-i
for (int j = 0; j < arrayLen - 1 - i; ++j)
{
if (array[j] > array[j + 1])
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
一种改进的算法思想:
当所有的元素已经有序时,是不会再执行if (array[j] > array[j + 1]){}里面的语句,那么我们可以利用这一个特性,提前结束循环
void Bubble_Sort_Improve1(int array[], int arrayLen)
{
// 定义一个变量指示当前的数组是否有序
int disorderly = 1;
while (disorderly)
{
// 先假设数组已经有序,如果执行了if(){} 语句则证明当前是无序的,再更改标志
disorderly = 0;
for (int i = 0; i < arrayLen-1; ++i)
{
if (array[i] > array[i + 1])
{
disorderly = 1;
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
}
还有一种改进思想是:
用一个变量记录当前无序发生的位置(disorderly),下次循环的时候,只循环到无序的位置(即 disorderly)
void Bubble_Sort_Improve2(int array[], int arrayLen)
{
// 定义一个变量指示当前的数组无序的位置
int disorderly = arrayLen-1;
while (disorderly)
{
// 利用一个零时变量来记录当前的无序位置
int tempDisorderly = 0;
for (int i = 0; i < disorderly; ++i)
{
if (array[i] >array[i + 1])
{
tempDisorderly = i;
Swap_IntVal(array + i, array + i + 1);
}
}
// 将最后的无序的位置赋值给无序位置的记录
disorderly = tempDisorderly;
}
}
详细的代码:代码地址应该会选择放在github,但是最近我对github的操作还不是很熟悉