- 浏览: 52888 次
- 性别:
- 来自: 湖南
最新评论
看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 ;
}
* 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
发表评论
-
项目开发日志杂记
2009-05-04 13:05 971开发日志 0:32 2008-9-18 1、中文 ... -
笔记本维护故障一则
2007-03-18 23:40 712唉呀,今天真的是羞死 ... -
多Web服务器的80端口访问
2007-03-23 11:42 1474写这篇文章,源自于自己的一个需求。这几天一校园WEB站点因为域 ... -
[转]Windows系统文件详细解说
2007-04-02 23:38 629详细的介绍了WINDOWS系统文件的用途,我想各位保存一份以后 ... -
关于Windows文件共享服务的一些问题
2007-04-02 23:44 2516[问题引出]:我刚安装windows2003时,Compute ... -
MS Project 2003的一个问题
2007-04-03 18:04 1053[问题引出]:刚装完MS Project 2003,一运行就出 ... -
IBM xSeries服务器安装内存一则
2007-04-04 00:55 821部门进购IBM xSeries 225服务器已经达三年之久了, ... -
JAVA与蓝牙起步(Getting Started with Java and Bluetooth)
2007-04-26 00:39 1513栈初始化在你做任何事之前,你需要初始化你的栈。记住,栈是一个用 ... -
Windows 2000下的远程桌面工具
2007-04-28 18:10 1037在Windows XP之后的系统中都会在“系统”属性中可以设置 ... -
最近在看的书
2007-06-25 03:17 6581、JSP网络开发技术与整合应用 ... -
想看的书---<<开发自己的搜索引擎---Lucene 2.0 + Heritrix>>
2007-06-26 21:47 1732开发自己的搜索引擎---Lucene 2.0 + Heritr ... -
数据挖掘相关
2007-06-27 08:43 757什么是规则?就是一个条件和一个结果的和:If con ... -
不要用浏览器来测试
2007-07-03 11:02 920进行B/S系统编程,大概浏览器就是最直接的测试程序是否正确的方 ... -
Big-Endian And Little-Endian
2007-07-07 11:32 881今天老师给我们复习单片机,出了一个题目,就这个字节存储顺序搞得 ... -
MySQL的中文问题
2007-07-08 21:12 721唉,看到网上这么多的关于MySQL中文编码的问题。今天自己碰到 ... -
[转]RAW FileSystem Recovery
2007-07-11 09:09 1001To know ho ... -
关于人工神经网络中的M-P模型的一点疑问
2007-08-08 22:31 954人工神经网络M-P模型构成一个逻辑非模型,从书中抄下来的,如下 ... -
JOONE(Java Object-Oriented Network Engine)使用初探
2007-09-30 16:03 12731 /**/ ... -
OpenGL in VC++
2008-01-19 00:30 1009首先看一个简单的例子: 1 #include <wind ... -
VC++中的ON_COMMAND_RANGE宏
2008-01-26 13:51 1787VC++中的ON_COMMAND_RANGE宏 ...
相关推荐
快速排序是基于“分区”操作的排序,选取一个基准元素,将数组分为两部分,然后对这两部分分别进行排序,总时间复杂度也是O(n log n)。 **3. 性能比较** 实验结果显示,快速排序在比较次数和平均运行时间上都表现...
使用冒泡算法对其进行排序 找到链表中倒数第k个节点 不同实现 设置两个指针p1、p2,让p2比p1快k个节点,同时向后遍历,当p2为空,则p1为倒数第k个节点 (-k+1+链表总数) % 链表总数 ...
链表由节点组成,每个节点包含数据和指向下一个节点的指针,它允许在不移动其他元素的情况下添加或删除元素。栈和队列是两种特殊的数据结构,栈遵循“后进先出”(LIFO)原则,常用于函数调用和表达式求值;队列遵循...
- **改变版**:在基本二分查找的基础上,可以通过调整边界条件实现不同的功能,例如查找目标元素的第一个或最后一个出现位置。 **1.4 衡量算法好坏** 衡量算法好坏通常基于以下标准: - 时间复杂度:算法执行所需...
- **简单排序**:第三章介绍了几种常见的排序算法,如冒泡排序、选择排序等,并用Java代码实现了这些算法。这些排序算法是理解和实现更复杂算法的基础。 ##### 三、进阶部分 - **栈与队列**:第四章深入探讨了栈和...
本书作者罗伯特·拉福尔(Robert Lafore)以其轻松幽默的文风和丰富的图表,为读者提供了一个从理论到实践全面理解数据结构与算法的机会。 #### 二、数据结构基础 1. **数组**:数组是最基本的数据结构之一,它是...
然后,为每种排序算法创建一个实现类,如`BubbleSortStrategy`、`BinarySortStrategy`(可能是快速排序或二路归并排序)和`HeapSortStrategy`。这些实现类将包含具体的排序逻辑。接着,你可以有一个`Sorter`类,它...
8. 二路归并排序是将两个已排序的子序列合并成一个有序序列的过程,第一阶段是将原始序列拆分为两半进行比较合并。 9. 二叉树的第i层最多有2^(i-1)个节点,因为每层的节点数最多是前一层的两倍。 10. 删除单链表中...
- **两路合并排序**:将数组分为两半,递归地排序这两半,然后将它们合并成一个有序数组。 - **堆排序**:构建一个最大堆或最小堆,然后逐步取出堆顶元素放入已排序部分。 ##### 2. 随机关键字生成 编写算法,利用...
`Sort.h` 文件中定义了一个模板类 `Sort`,该类提供了多种排序算法的实现。排序算法的基本操作包括: - **BubbleSort(Type array[], int n)**:冒泡排序。 - **SelectionSort(Type array[], int n)**:选择排序。 - ...
这一章旨在为读者提供一个宏观视角,帮助其理解后续章节中的具体内容。 - **第2章:数组** 阵列是最基本的数据结构之一,在计算机科学中扮演着极其重要的角色。本章详细解释了数组的工作原理、实现方法及使用技巧...
这份"数据结构和算法笔记与快速入门.zip"压缩包文件显然旨在为学习者提供一个全面的起点,帮助他们掌握这个领域的核心概念。 数据结构是计算机存储、组织数据的方式,它决定了数据的逻辑结构、物理存储以及对数据的...
例如,单例模式确保一个类只有一个实例,工厂模式用于创建对象,装饰者模式用于动态地给对象添加职责,而观察者模式则用于实现对象间的发布/订阅关系。理解并能灵活应用这些模式,将大大提高代码的可读性和可维护性...
- **双路冒泡**:在冒泡过程中,如果某次比较没有发生交换,可以提前结束当前方向的冒泡,然后反向进行一次冒泡,这样可能减少不必要的比较。 6. **适用场景**: 虽然冒泡排序的时间效率相对较低,但它简单易懂,...
循环链表是一种特殊的链表形式,最后一个节点的指针不是指向`NULL`而是指向链表的第一个节点,形成一个闭环。循环链表的主要优点是可以方便地进行循环遍历。 **代码解析:** - **节点类**:`ListNode.h` 定义了...