`
ganyu21
  • 浏览: 6939 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

白话经典算法系列之一 冒泡排序的三种实现

 
阅读更多

 

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

设数组长度为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;
                     }
       }
}
 

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

 

分享到:
评论

相关推荐

    MoreWindows白话经典算法之七大排序第2版(高清)

    在第一版的基础上新加了对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法的总结篇,方便大家复习,合适作为笔试面试前的复习资料。

    白话经典算法之七大排序

    对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法进行了详细的讲解

    MoreWindows白话经典算法之七大排序(高清版)

    这是本人在研一上课时所整理的文档,包括冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法,这些文章不仅使我在考试中取了不错的成绩,也为后来顺利面过迅雷,腾讯...

    [网盘]MoreWindows白话经典算法之七大排序第2版(高清)

    在第一版的基础上新加了对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法的总结篇,方便大家复习,合适作为笔试面试前的复习资料。

    MoreWindows白话经典算法之七大排序

    包括冒泡排序,直接 插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆 排序这七种常用的排序方法,

    白话经典算法

    冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法的总结,方便大家复习,合适作为笔试面试前的复习资料

    数据结构和算法必知必会的50个代码实现

    * 实现归并排序、快速排序、插入排序、冒泡排序、选择排序* 编程实现O(n)时间复杂度内找到一组数据的第K大元素 ## 二分查找 * 实现一个有序数组的二分查找算法* 实现模糊二分查找算法(比如大于等于给定值的第一个...

    7大排序python实现(冒泡,快速,插入,希尔,选择,堆,归并)

    参考csdn博客专栏《白话经典算法》用python实现数据结构种常见的7种排序

    计算机七大排序

    MoreWindows白话经典算法之七大排序 这是本人在研一上课时所整理的文档,包括冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序

    50个必会的数据结构及算法实现源码

    问题:实现归并排序、快速排序、插入排序、冒泡排序、选择排序 问题:编程实现O(n)时间复杂度内找到一组数据的第K大元素 二分查找、散列表、字符串处理、二叉树、堆、图、回溯、分治、动态回归等。 资源中包括常用...

    leetcode下载-playground:玩儿

    leetcode下载 playground 目的在于平时的学习而写的代码 1.common包 ...IpUtil-IP格式的互转和IP地址的一些判断 ...2.冒泡排序,时间复杂度是O(n^2),空间复杂度是O(1),稳定的一种排序, 主要思想:有两层循

Global site tag (gtag.js) - Google Analytics