zoukankan      html  css  js  c++  java
  • 冒泡法排序

        冒泡法排序,顾名思义,整个排序过程实际上一次次的冒泡过程,每次冒泡都会进行相邻数字的比较,如果Left>Right,则交换,一次冒泡完毕后,数组最大的值就会被安置到最后的位置。然后进行第二次冒泡,这次冒泡就会将次大值安置到n-1的记录上。依此类推。

        冒泡法排序的算法复杂度O(n2).

      C++代码如下:

    #include "stdafx.h"
    
    /************************************************************************/
    /*                             冒泡排序                                  */
    /************************************************************************/
    void BubbleSort(int data[], int n)
    {
        for (int i=0; i<n-1; i++)
        {
            bool exchange = false;
            for (int j=0; j<n-i-1; j++)
            {
                if (data[j] > data[j+1])
                {
                    int tmp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = tmp;
                    exchange = true;
                }
            }
            if (!exchange)
                break;
        }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int data[10]={-100, 79, -3, 0, 49, 21, 8, 200, 12341, 0};
        BubbleSort(data, 10);
    
        return 0;
    }

      注意两个问题:

      1. 冒泡法排序比较的是相邻的两个元素,而不是头元素和之后的几个元素相比,网上一些写法错误于此,归根结底就是自己没有实际去手写一边冒泡排序,想当然了;

      2. 注意循环结束的条件,并不是一定要一直比较直到程序结束,而是当一次比较过程中没有交换操作的时候,程序即可终止;

           3. 冒泡法排序的算法复杂度是O(n2)。

  • 相关阅读:
    mysql按月获取一年内每个月的数据量
    Intellij IDEA的激活
    mysql随机更新时间
    获取mysql数据表中的列名
    maven PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path
    sublime相关设置
    行走在这个城市,无助的是怀念悲伤
    如何开软件公司
    MYSQL常用语句
    爱——无题
  • 原文地址:https://www.cnblogs.com/jiayayao/p/6135972.html
Copyright © 2011-2022 走看看