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的操作还不是很熟悉

  • 相关阅读:
    Qt5官方demo解析集21——Extending QML
    多封装,少开放。强烈建议C++标准添加class之间的注入机制
    iOS 设计模式之工厂模式
    golang的select典型用法
    Go的异常处理 defer, panic, recover
    Visual Studio Code 的简单试用体验
    在Visual Studio Code中配置GO开发环境
    Go语言开发环境配置
    Go 语言 很牛
    Go将统治下一个10年?Go语言发展现状分析
  • 原文地址:https://www.cnblogs.com/bkcarlos/p/MoreWindows.html
Copyright © 2011-2022 走看看