哪位大虾帮小弟看下这个
小弟最近在学习算法,这里有个问题有点想不明白: 在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]之前的所有数都小