“关于双向冒泡法排序的一个问题”

Eva_Hua 2009-11-05 02:28:09
//双向起泡排序.h
void dbubblesort(sequenlist r[],int n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++)
{
if(r[j]>r[j+1])
{
int temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
}
}
for(int k=j;k>=1;k--)
{
if(r[k]<r[k-1])
{
int temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
}
}
}
数据结构的一个题,,不知道错在哪里了,,麻烦各位帮忙看下
...全文
172 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eva_Hua 2009-11-09
  • 打赏
  • 举报
回复
谢谢啊~~可是你觉得我的程序哪里有问题呢?
danguilin 2009-11-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jernymy 的回复:]
楼主,帮你改写了一下
C/C++ code
#include"stdio.h"#define MAX_NUM 10#define SWAP_V(a, b, c) \
{ \
c= a; \
a= b; \
b= c; \
}void PrintValue(int value[])
{int i;for (i=0; i< MAX_NUM; i++)
{
printf(" %d,", value[i]);
}
printf("\n");
}void dbubblesort(int r[],int n)
{int i;int j;int k;int temp;for (i=0; i< n; i++)
{for (j=0; j< n-i; j++)
{if (r[j]> r[j+1])
{
SWAP_V(r[j], r[j+1], temp);
}
}for (k= j-1; k>1; k--)
{if (r[k]< r[k-1])
{
SWAP_V(r[k-1], r[k], temp);
}
}
}
}int main(int argc,char**argv)
{int i;
for(i=0;i<10;i++)
scanf("%d",&table[i]);//把2楼的这里改了一下就可以自己输入数排序了

printf("sort before:");
PrintValue(table);
dbubblesort(table, MAX_NUM);
printf("sort after:");
PrintValue(table);return0;
}
[/Quote]
Eva_Hua 2009-11-08
  • 打赏
  • 举报
回复
内外循环的边界多了??什么意思ia?
asimay 2009-11-08
  • 打赏
  • 举报
回复
效率会有明显变化吗? 感觉不出来。
感觉就是在内循环增加了次数来减少外循环的cost。

算法上面还是没有啥变化。
错误就是内外循环的边界多了。
Eva_Hua 2009-11-08
  • 打赏
  • 举报
回复
可是怎样能自己输数字,,,然后让它排序
superliubao 2009-11-08
  • 打赏
  • 举报
回复
LZ的数组范围有问题,请仔细看一下。最外层的循环是1--n,而里面的第二个循环把下标 0 也加进去了。。。
jernymy 2009-11-08
  • 打赏
  • 举报
回复
楼主,帮你改写了一下

#include "stdio.h"

#define MAX_NUM 10
#define SWAP_V(a, b, c) \
{ \
c = a; \
a = b; \
b = c; \
}

void PrintValue(int value[])
{
int i;

for (i = 0; i < MAX_NUM; i++)
{
printf(" %d, ", value[i]);
}
printf("\n");
}

void dbubblesort(int r[], int n)
{
int i;
int j;
int k;
int temp;

for (i = 0; i < n; i++)
{
for (j = 0; j < n-i; j++)
{
if (r[j] > r[j+1])
{
SWAP_V(r[j], r[j+1], temp);
}
}

for (k = j-1; k > 1; k--)
{
if (r[k] < r[k-1])
{
SWAP_V(r[k-1], r[k], temp);
}
}
}
}

int main(int argc, char **argv)
{
int table[MAX_NUM] =
{
1, 8, 2, 9, 5,
5, 10, 7, 90, 50
};

printf("sort before:");
PrintValue(table);
dbubblesort(table, MAX_NUM);
printf("sort after:");
PrintValue(table);

return 0;
}
berryluo 2009-11-05
  • 打赏
  • 举报
回复
建议LZ加点分吧
内容概要 本资源是一份数据结构课程设计报告,完整呈现了基于双向链表的双向冒泡排序算法的实现。报告包含完整的C语言源代码、详细的设计思路、性能分析和测试结果。核心内容包括双向链表的基本操作(初始化、插入、遍历、释放)以及优化的双向冒泡排序算法实现,通过交替的正向和反向遍历,有效减少了不必要的比较次数。 适用人群 计算机专业学生:特别是正在学习《数据结构》课程的大一、大二学生 编程初学者:希望深入理解链表结构和排序算法的编程爱好者 课程设计参考:需要完成类似数据结构课程设计项目的学生 算法学习者:想要了解传统排序算法优化思路的技术人员 使用场景与目标 主要应用场景: 课程教学:作为《数据结构》课程中链表和排序算法的教学案例 实验指导:指导学生完成链表操作和排序算法的编程实验 技术面试准备:帮助准备技术面试中关于数据结构和算法的相关问题 算法理解:通过具体代码深入理解双向冒泡排序的工作原理 学习目标: 掌握双向链表的存储结构和基本操作 理解双向冒泡排序算法的优化思想 学会分析算法的时间复杂度和空间复杂度 培养面向实际问题的系统分析和设计能力 提升C语言编程和调试技能 资源特色 技术亮点: 完整实现:从链表构建到排序算法的一站式解决方案 优化算法:双向冒泡排序相比传统冒泡排序具有更好的实际性能 详细注释:代码中包含清晰的注释,便于理解和学习 实践验证:提供测试用例和结果分析,验证算法正确性 教育价值: 体现了从理论到实践的完整学习路径 展示了算法优化的重要性和实现方法 培养了学生的系统设计和分析能力 扩展应用 除了作为课程设计参考,本资源还可用于: 算法竞赛的基础训练 软件开发中链表相关功能的实现参考 理解更多复杂排序算法的基础 学习内存管理和指针操作的实际应用

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧