冒泡排序的三种实现方法

 更新时间:2013年10月12日 09:55:38   作者:  
本篇文章是对冒泡排序的三种实现方法进行了详细的介绍,需要的朋友可以过来参考下。希望对大家有所帮助

冒泡排序是非常容易理解和实现,以从小到大排序举例:

设数组长度为N。

1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。

2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。

3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

按照定义很容易写出代码:

复制代码 代码如下:

//冒泡排序1
void BubbleSort1(int a[], int n)
{
       int i, j;
       for (i = 0; i < n; i++)
              for (j = 1; j < n - i; j++)
                     if (a[j - 1] > a[j])
                            Swap(a[j - 1], a[j]);
}

下面对其进行优化,设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。
复制代码 代码如下:

//冒泡排序2
void BubbleSort2(int a[], int n)
{
       int j, k;
       bool flag;

       k = n;
       flag = true;
       while (flag)
       {
              flag = false;
              for (j = 1; j < k; j++)
                     if (a[j - 1] > a[j])
                     {
                            Swap(a[j - 1], a[j]);
                            flag = true;
                     }
              k--;
       }
}


再做进一步的优化。如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。
复制代码 代码如下:

//冒泡排序3
void BubbleSort3(int a[], int n)
{
 int j, k;
 int flag;

 flag = n;
 while (flag > 0)
 {
  k = flag;
  flag = 0;
  for (j = 1; j < k; j++)
   if (a[j - 1] > a[j])
   {
    Swap(a[j - 1], a[j]);
    flag = j;
   }
 }
}

冒泡排序毕竟是一种效率低下的排序方法,在数据规模很小时,可以采用。数据规模比较大时,最好用其它排序方法。

相关文章

  • C++实现简单扫雷小游戏

    C++实现简单扫雷小游戏

    这篇文章主要为大家详细介绍了C++实现简单扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • mysate中stat命令的实现方法

    mysate中stat命令的实现方法

    这篇文章主要介绍了mysate中stat命令的实现方法,stat作用:用来显示文件的详细信息,包括inode, atime, mtime, ctime,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • QT实现定时关闭消息提示框

    QT实现定时关闭消息提示框

    这篇文章主要介绍了软件利用Qt简单实现消息提示框可定时自动关闭,文中的示例代码讲解详细,对我们;了解QT有一定的帮助,感兴趣的可以学习一下
    2022-01-01
  • c++ 面向对象设计五大原则

    c++ 面向对象设计五大原则

    这篇文章主要介绍了c++ 面向对象设计五大原则,帮助大家更好的理解和学习c++面向对象设计,感兴趣的朋友可以了解下
    2020-08-08
  • Qt Design Studio创建工程的实现方法

    Qt Design Studio创建工程的实现方法

    Qt Design Studio它允许设计人员和开发人员使用通用的设计、开发、分析和调试工具在不同的开发平台上共享一个项目,本文主要介绍了Qt Design Studio创建工程的实现方法,具有一定的参考价值,感兴趣的可以了解一下
    2022-05-05
  • C语言入门篇--初识C语言及数据类型

    C语言入门篇--初识C语言及数据类型

    本篇文章是c语言基础篇,主要为大家介绍了C语言的基本类型,为大家介绍了什么是C语言,希望可以帮助大家快速入门c语言的世界,更好的理解c语言
    2021-08-08
  • C语言清楚了解指针的使用

    C语言清楚了解指针的使用

    C语言这门课程在计算机的基础教学中一直占有比较重要的地位,然而要想突破C语言的学习,对指针的掌握是非常重要的,本文将具体针对指针的基础做详尽的介绍
    2022-06-06
  • C++实现LeetCode(769.可排序的最大块数)

    C++实现LeetCode(769.可排序的最大块数)

    这篇文章主要介绍了C++实现LeetCode(769.可排序的最大块数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言连续子向量的最大和及时间度量实例

    C语言连续子向量的最大和及时间度量实例

    这篇文章主要介绍了C语言连续子向量的最大和及时间度量,需要的朋友可以参考下
    2014-09-09
  • C语言用栈实现十进制转换为二进制的方法示例

    C语言用栈实现十进制转换为二进制的方法示例

    这篇文章主要介绍了C语言用栈实现十进制转换为二进制的方法,结合实例形式分析了C语言栈的定义及进制转换使用技巧,需要的朋友可以参考下
    2017-06-06

最新评论