• 经典排序之 冒泡排序


    排序算法有很多种,每一种在不同的情况下都占有一席之地。关于排序算法我分“经典排序之”系列分别述之。本篇为冒泡排序。

    冒泡排序是最古老的排序,我们最早开始学的排序算法:

    冒泡排序总共有三种不同的形式,对应三种不同的排序算法。(C++语言)

     转载引用请注明出处:http://www.cnblogs.com/bakari/archive/2012/08/11/2633672.html 谢谢!

    先看类的描述:

    复制代码
     1 /************************************************
     2  *  Author: bakari Date: 2012.7.30
     3  *  三种冒泡排序
     4  *  第一种:将最小的元素冒泡到最前面
     5  *  第二种:将最大的元素冒泡到最后面
     6  *  第三种:双向冒泡
     7  ************************************************/  
     8 class BubbleSort
     9 {
    10     int len;
    11     vector<int> BubbleList;
    12 public:
    13     BubbleSort(vector<int>,int);
    14     void Bubble_Sort1();
    15     void Bubble_Sort2();
    16     void Bubble_Sort3();
    17     void Swap(int,int);
    18     void Print();
    19 };
    复制代码

    1、将小元素冒泡到最前面,首先操作的是小元素。

    复制代码
     1 // 第一种
     2 void BubbleSort::Bubble_Sort1()
     3 {
     4     for (int i = 0; i != len - 1; ++i)
     5     {
     6         for (int j = i + 1; j != len; ++j)
     7         {
     8             if (BubbleList[j] < BubbleList[i])
     9                 Swap(i,j);
    10         }
    11     }
    12 }
    复制代码

    2、将最大的元素冒泡到最后面

    复制代码
     1 //第二种
     2 void BubbleSort::Bubble_Sort2()
     3 {
     4     for (int i = 0; i != len; ++i)  //注意和上面的算法对照此循环
     5     {
     6         for (int j = 0; j != len - 1 - i; ++j) //j只能到len - 1;
     7         {
     8             if(BubbleList[j + 1] <BubbleList[j])
     9                 Swap(j + 1,j);
    10         }
    11     }
    复制代码

    3、双向冒泡

    怎么个双向法请看代码:

    复制代码
     1 //第三种
     2 void BubbleSort::Bubble_Sort3()
     3 {
     4     int left = 0;
     5     int right = len - 1;
     6     int i;
     7     while (left < right)
     8     {
     9         for (i = left;i != right; ++i)            //从左到右冒泡
    10         {
    11             if (BubbleList[i + 1] < BubbleList[i])
    12                 Swap(i + 1,i);                    //交换
    13         }
    14         right = i - 1;
    15         for (i = right;i != left; --i)             //从右到左冒泡
    16         {
    17             if (BubbleList[i - 1] > BubbleList[i])
    18                 Swap(i - 1,i);
    19         }
    20         left = i + 1;
    21     }
    22 }
    复制代码
  • 相关阅读:
    轻松实现 网络视频播放器
    端口扫描 多方式协同实现
    关于部分应用无法向POJ提交代码的解决方案
    一套跨平台五子棋网游的开发经历
    SSH2.0编程 ssh协议过程实现
    ssh秘钥交换详解与实现 diffie-hellman-group-exchange-sha
    OnlineJudge 离线题库采集
    SOCKET 实现NAT 穿越
    基于公网smtp协议实现邮件服务器
    周六搞事情,微信小程序开发文档已放出!
  • 原文地址:https://www.cnblogs.com/zhangyuhang3/p/6868446.html
Copyright © 2020-2023  润新知