`
tanzek
  • 浏览: 52888 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

添加一个二路冒泡算法

阅读更多

看Robert Sedgewick的《algorithms in c》一书时,在讲到冒泡算法的时候在练习中提到了“摇摆排序”(中文版书中的P206面的第30题),然而细细理解出来就是指的二路冒泡,其实在Donald E.Knuth的《计算机程序设计艺术 第三卷 排序与查找》里面也有讲过,名字记得不是很清楚了。
暂时来讲我自己实现了一个,里面的性能分析和调优留在以后再做,先把它放在这里和大家一起共享一下,欢迎指正。

/*
* by tanzek. 2009-02-21 . 
* implement in dev cpp.
*/

#include 
< stdio.h >
#include 
< stdlib.h >

#define  n 10

void  print( int   * a,  int  m,  int  l,  int  r)
{
    
for ( int  i = 0 ; i < m; i ++ )
    {
        printf(
" %d  " , a[i]);        
    }     
    printf(
" --->l=%d, r=%d\n " , l, r);
}

int  count  =   0 ;

int  main()
{
    
int  a[ 10 =  { 104 , 21 , 33 , 4 , 8 , 102 , 7 , 89 , 91 , 11 };
    
int  l, r;
    l 
=   - 1 ; r  =  n;
    
int  t  =   1 ;
    
int  temp;
    
int  j;
    
while (t  >   0 )
    {
        count 
++ ;
        printf(
" 第%d趟\n " , count);
         
        t 
=   - 1 ;
        
for (j = r - 1 ; j > l + 1 ; j -- )
        {
            
if (a[j]  <  a[j - 1 ])
            {
                temp
= a[j]; a[j] = a[j - 1 ]; a[j - 1 ] = temp;
                t 
=  j  -   1 ;
            }
        }
        l 
=  j;
        
for (j = l + 1 ; j < r - 1 ; j ++ )
        {
            
if (a[j]  >  a[j + 1 ])
            {
                temp
= a[j]; a[j] = a[j + 1 ]; a[j + 1 ] = temp;
                t 
=  j + 1 ;
            }
        }
        r 
=  j;
        print(a, n, l, r);
    }
    
    printf(
" \ncount = %d\n " , count);
    system(
" PAUSE " );
    
return   0 ;
}

同时,通过GOOGLE搜索,也搜到一篇二路冒泡算法实现的文章,也放在这里供大家一起参考。
武林外传 http://qzone.qq.com/blog/53631006-1210520905
分享到:
评论

相关推荐

    不同排序算法实现及性能分析(研究生项目作业)

    快速排序是基于“分区”操作的排序,选取一个基准元素,将数组分为两部分,然后对这两部分分别进行排序,总时间复杂度也是O(n log n)。 **3. 性能比较** 实验结果显示,快速排序在比较次数和平均运行时间上都表现...

    数据结构与算法.xmind

    使用冒泡算法对其进行排序 找到链表中倒数第k个节点 不同实现 设置两个指针p1、p2,让p2比p1快k个节点,同时向后遍历,当p2为空,则p1为倒数第k个节点 (-k+1+链表总数) % 链表总数 ...

    用一年时间打得数据结构算法

    链表由节点组成,每个节点包含数据和指向下一个节点的指针,它允许在不移动其他元素的情况下添加或删除元素。栈和队列是两种特殊的数据结构,栈遵循“后进先出”(LIFO)原则,常用于函数调用和表达式求值;队列遵循...

    数据结构与算法 全 数据结构与算法全 Java

    - **改变版**:在基本二分查找的基础上,可以通过调整边界条件实现不同的功能,例如查找目标元素的第一个或最后一个出现位置。 **1.4 衡量算法好坏** 衡量算法好坏通常基于以下标准: - 时间复杂度:算法执行所需...

    数据结构与算法

    - **简单排序**:第三章介绍了几种常见的排序算法,如冒泡排序、选择排序等,并用Java代码实现了这些算法。这些排序算法是理解和实现更复杂算法的基础。 ##### 三、进阶部分 - **栈与队列**:第四章深入探讨了栈和...

    Java版数据结构与算法分析

    本书作者罗伯特·拉福尔(Robert Lafore)以其轻松幽默的文风和丰富的图表,为读者提供了一个从理论到实践全面理解数据结构与算法的机会。 #### 二、数据结构基础 1. **数组**:数组是最基本的数据结构之一,它是...

    策略模式实现五种排序java代码

    然后,为每种排序算法创建一个实现类,如`BubbleSortStrategy`、`BinarySortStrategy`(可能是快速排序或二路归并排序)和`HeapSortStrategy`。这些实现类将包含具体的排序逻辑。接着,你可以有一个`Sorter`类,它...

    数据结构算法

    8. 二路归并排序是将两个已排序的子序列合并成一个有序序列的过程,第一阶段是将原始序列拆分为两半进行比较合并。 9. 二叉树的第i层最多有2^(i-1)个节点,因为每层的节点数最多是前一层的两倍。 10. 删除单链表中...

    南京邮电大学数据结构实验四(各种内排序算法的实现及性能比较)

    - **两路合并排序**:将数组分为两半,递归地排序这两半,然后将它们合并成一个有序数组。 - **堆排序**:构建一个最大堆或最小堆,然后逐步取出堆顶元素放入已排序部分。 ##### 2. 随机关键字生成 编写算法,利用...

    C++实现数据结构中的算法

    `Sort.h` 文件中定义了一个模板类 `Sort`,该类提供了多种排序算法的实现。排序算法的基本操作包括: - **BubbleSort(Type array[], int n)**:冒泡排序。 - **SelectionSort(Type array[], int n)**:选择排序。 - ...

    数据结构和算法(java版本)

    这一章旨在为读者提供一个宏观视角,帮助其理解后续章节中的具体内容。 - **第2章:数组** 阵列是最基本的数据结构之一,在计算机科学中扮演着极其重要的角色。本章详细解释了数组的工作原理、实现方法及使用技巧...

    数据结构和算法笔记与快速入门.zip

    这份"数据结构和算法笔记与快速入门.zip"压缩包文件显然旨在为学习者提供一个全面的起点,帮助他们掌握这个领域的核心概念。 数据结构是计算机存储、组织数据的方式,它决定了数据的逻辑结构、物理存储以及对数据的...

    考试类精品--期末考试复习做的笔记,包括:操作系统,设计模式,计算机网络,算法设计与分析.zip

    例如,单例模式确保一个类只有一个实例,工厂模式用于创建对象,装饰者模式用于动态地给对象添加职责,而观察者模式则用于实现对象间的发布/订阅关系。理解并能灵活应用这些模式,将大大提高代码的可读性和可维护性...

    pythonBubbleSort:在Python中实现的冒泡排序

    - **双路冒泡**:在冒泡过程中,如果某次比较没有发生交换,可以提前结束当前方向的冒泡,然后反向进行一次冒泡,这样可能减少不必要的比较。 6. **适用场景**: 虽然冒泡排序的时间效率相对较低,但它简单易懂,...

    数据结构与算法分析 C++

    循环链表是一种特殊的链表形式,最后一个节点的指针不是指向`NULL`而是指向链表的第一个节点,形成一个闭环。循环链表的主要优点是可以方便地进行循环遍历。 **代码解析:** - **节点类**:`ListNode.h` 定义了...

Global site tag (gtag.js) - Google Analytics