冒泡排序的总结

数据结构排序算法之——冒泡排序(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的操作还不是很熟悉

posted @ 2016-09-15 22:24  bkcarlos  阅读(1124)  评论(0编辑  收藏  举报