zoukankan      html  css  js  c++  java
  • 冒泡排序的总结

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

  • 相关阅读:
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 Cowboys
    Java实现 蓝桥杯 算法训练 Cowboys
    55. Jump Game
    54. Spiral Matrix
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/bkcarlos/p/MoreWindows.html
Copyright © 2011-2022 走看看