免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4802 | 回复: 27
打印 上一主题 下一主题

插入排序的一个源程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-06 15:29 |只看该作者 |倒序浏览
关于插入排序的,调试成功!
在DEV c++

  1. #include <iostream.h>;
  2. #include <conio.h>;
  3. const int maxsize=5;
  4. typedef struct {
  5. int key;
  6. char *keyinfo;
  7. }redtype;
  8. redtype *r[maxsize+1];
  9. void init()
  10. {int i;
  11. r[0]=new redtype;
  12. r[0]->;key=0;
  13. r[0]->;keyinfo="d";
  14. cout<<"please input the data value:"<<endl;
  15. for (i=0;i<maxsize;i++)
  16. {
  17. r[i+1]=new redtype;
  18. cin>;>;r[i+1]->;key;
  19. r[i+1]->;keyinfo="d";
  20. };
  21. };
  22. void insertsort()
  23. {
  24. extern int lt(int a,int b);
  25. int j;
  26. for(int i=2;i<=maxsize;i++)
  27. {
  28. if (lt(r[i]->;key,r[i-1]->;key))
  29. {
  30. r[0]->;key=r[i]->;key;
  31. for(j=i-1;(lt(r[0]->;key,r[j]->;key)&&j>;0);--j)
  32. {r[j+1]->;key=r[j]->;key;
  33. }
  34. r[j+1]->;key=r[0]->;key;
  35. }
  36. }
  37. };
  38. int lt(int a,int b)
  39. {if (a>;b)
  40. return 0;
  41. else
  42. return 1;
  43. };
  44. void display()
  45. {int i;
  46. cout<<"the list of sorted data is:";
  47. for (i=1;i<=maxsize;i++)
  48. cout<<r[i]->;key<<" ";
  49. };
  50. main()
  51. {extern void init();
  52. extern void insertsort();
  53. extern int  lt(int a,int b);
  54. extern void display();
  55. init();
  56. insertsort();
  57. display();
  58. getch();
  59. }  
复制代码

论坛徽章:
0
2 [报告]
发表于 2003-05-06 17:38 |只看该作者

插入排序的一个源程序

代码写得太乱了
C文件写法是这样

INCLUDE部分
DEFINE部分(如果有的话)
EXTERN 声明部分
本地函数和变量声明部分

全局和静态变量定义部分
函数定义

论坛徽章:
0
3 [报告]
发表于 2003-05-06 17:44 |只看该作者

插入排序的一个源程序

还有就是函数最后不用分号
()语句后都不用加分号

代码对齐后结果

  1. #include<iostream.h>;
  2. #include<conio.h>;

  3. voidinit();
  4. intlt(inta,intb);
  5. voidinsertsort();
  6. intlt(inta,intb);
  7. voiddisplay();

  8. typedefstruct{
  9.         intkey;
  10.         char*keyinfo;
  11. }redtype;


  12. constintmaxsize=5;
  13. redtype*r[maxsize+1];
  14. voidinit()
  15. {
  16.         inti;
  17.         r[0]=newredtype;
  18.         r[0]->;key=0;
  19.         r[0]->;keyinfo="d";
  20.         for(i=0;i<maxsize;i++)
  21.         {
  22.                 cout<<"pleaseinputthedatavalue:";
  23.                 r[i+1]=newredtype;
  24.                 cin>;>;r[i+1]->;key;
  25.                 r[i+1]->;keyinfo="d";
  26.                 }
  27. }
  28. voidinsertsort()
  29. {
  30.         intj;
  31.         for(inti=2;i<=maxsize;i++)
  32.         {
  33.                 if(lt(r[i]->;key,r[i-1]->;key))
  34.                 {
  35.                         r[0]->;key=r[i]->;key;
  36.                         for(j=i-1;lt(r[0]->;key,r[j]->;key);--j)
  37.                                 r[j+1]->;key=r[j]->;key;
  38.                         r[j+1]->;key=r[0]->;key;
  39.                 }
  40.         }
  41. }
  42.         intlt(inta,intb)
  43. {if(a>;b)
  44.         return0;
  45.         else
  46.                 return1;
  47. }
  48. voiddisplay()
  49. {inti;
  50.         for(i=1;i<=maxsize;i++)
  51.                 cout<<"thelistofsorteddatais:";
  52.         cout<<r[i]->;key<<",";
  53. }
  54. main()
  55. {
  56.         init();
  57.         insertsort();
  58.         display();
  59.         getch();
  60. }
  61. 



复制代码

论坛徽章:
0
4 [报告]
发表于 2003-05-06 17:46 |只看该作者

插入排序的一个源程序

keyinfo没有分配内存
只是一个指针

这样用很容易出问题

帮你看到这么多问题
其它地方问题你检查一下吧

论坛徽章:
0
5 [报告]
发表于 2003-05-07 08:16 |只看该作者

插入排序的一个源程序

我一直查不出来!

论坛徽章:
0
6 [报告]
发表于 2003-05-07 10:56 |只看该作者

插入排序的一个源程序

先把keyinfo定义成char[100];
然后检查一下逻辑

论坛徽章:
0
7 [报告]
发表于 2003-05-07 10:58 |只看该作者

插入排序的一个源程序

说错了
这样使用是没有问题的

论坛徽章:
0
8 [报告]
发表于 2003-05-07 11:02 |只看该作者

插入排序的一个源程序


  1.    intj; 
  2.    for(inti=2;i<=maxsize;i++) 
  3.    { 
  4.       if(lt(r[i]->;key,r[i-1]->;key)) 
  5.       { 
  6.          r[0]->;key=r[i]->;key; 
  7.          for(j=i-1;lt(r[0]->;key,r[j]->;key);--j) 
  8.             r[j+1]->;key=r[j]->;key; 
  9.          r[j+1]->;key=r[0]->;key; 
  10.       }
  11.    } 

复制代码


这里的算法是错误的
我想你应该是理解错了算法了吧

http://algorithm.myrice.com/algorithm/commonalg/sort/internal_sorting/insertion_sort/insertion_sort.htm
这里是插入排序一一个说明
先理解一下

论坛徽章:
0
9 [报告]
发表于 2003-05-07 11:21 |只看该作者

插入排序的一个源程序

算法应该是没错的,主要是报一个什么内存读不了,一直找不到什么地方是BUG

论坛徽章:
0
10 [报告]
发表于 2003-05-07 11:39 |只看该作者

插入排序的一个源程序

那把
char *keyinfo;
改成数组keyinfo[10]
因为它在程序中指向的是常量"d"
所以不可以改变

再看看其它的还报什么错
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP