首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪位帮小弟看下这个

2012-06-19 
哪位大虾帮小弟看下这个小弟最近在学习算法,这里有个问题有点想不明白: 在pubub(p,n)这里面,其实不需要jk

哪位大虾帮小弟看下这个
小弟最近在学习算法,这里有个问题有点想不明白: 在pubub(p,n)这里面,其实不需要
  j=k+1; k=0;
  for (i=m; i>=j; i--)
  if (p[i-1]>p[i])
  { d=p[i]; p[i]=p[i-1]; p[i-1]=d; k=i;}  

这部分代码也能实现字符的排序,在这里为什么要加上这部分呢?
#include "stdio.h"
  void pcbub(p,n)
  int n;
  char p[];
  { int m,k,j,i;
  char d;
  k=0; m=n-1;
  while (k<m)
  { j=m-1; m=0;
  for (i=k; i<=j; i++)
  if (p[i]>p[i+1])
  { d=p[i]; p[i]=p[i+1]; p[i+1]=d; m=i;}
  j=k+1; k=0;
  for (i=m; i>=j; i--)
  if (p[i-1]>p[i])
  { d=p[i]; p[i]=p[i-1]; p[i-1]=d; k=i;}  
  }
  return;
  }
  main()
  { char *s;

  static char p[]={'a','s','t','b','x','e','f','h','i',
  'g','p', 'q','a','i','f','j','c','b','a','z','y','x'};
  s=p;
  printf("\n");
  printf("%s\n\n",p);
  printf("\n");
  pcbub(s,22);
  printf("%s\n",p);
  printf("\n");
  }


[解决办法]
j=k+1; k=0;
for (i=m; i>=j; i--)
if (p[i-1]>p[i])
{ d=p[i]; p[i]=p[i-1]; p[i-1]=d; k=i;} 这段代码是想验证下p[i+1]是否比p[i]之前的所有数都小

热点排行