回 帖 发 新 帖 刷新版面

主题:C51单片机“冒泡法”排序实例

程序如下
#include<reg51.h>
#include<stdio.h>
void main()
{
    unsigned char xdata a[ ]=
        {0x3f,0x44,0x32,0x54,0x66,0x56,0x99,0x88,0x77,0x11,0x34};
    unsigned char i,j,t;
    printf("the unsorted numbers:\n");
    for(i=0;i<9;i++)
      printf("%bx",a[i]);
      printf("\n");
    for(j=0;j<=8;j++)
      for(i=0;i<=9-j;i++)
      if(a[i]>a[i+1])
         {
            t=a[i];
            a[i]=a[i+1];
            a[i+1]=t;
         }
            printf("the sorted number:\n");
       for(i=0;i<=10;i++)
       printf("%bx",a[i]);
}
我对上述程序for(i=0;i<9;i++)中的循环判断条件i<9有疑问,数组给出的书明明是11个,判断条件应该是i<10才对啊?我说的正确的话,接下来的for(j=0;j<=8;j++)的判断条件应该也是错的。不知道我分析的对不对,还望各位指教!不胜感激!

回复列表 (共1个回复)

沙发

单片机我不懂,printf("%bx",a[i]); %bx这是不是只有在单片机才有的格式?
如果要对11个元素进行冒泡排序好像上面的代码是要改一下。

我想,在未排序的时候输出 应该和排好序后的输出 的输出应该一样:for(i=0;i<=10;i++)

11个数据冒泡排序 需要 冒10次泡,因此for(j=0;j<=8;j++)也要改一下。不然的话 把代码改一下[code=c]
unsigned char xdata a[ ] = /* 最小的数放到最后面 */
  {0x3f,0x44,0x32,0x54,0x66,0x56,0x99,0x88,0x77,0x34,0x11};
[/code]然后运行程序看是不是正确的排好序了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册