鱼C论坛

 找回密码
 立即注册
查看: 674|回复: 5

[已解决]c语言

[复制链接]
发表于 2020-4-8 16:41:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

在排序中,为什么数组长度需要比实际长度扩大后,才能对所有元素进行排序

冒泡排列中升序,在主调函数中使用函数是我认为该写成   sort{a,6}
但显示结果为只对a数组的前4个进行排序,后两个没排序。
我把sort{a,6}改成sort(a, 10)这对a数组的全体元素(6个)进行了排序

# include<stdio.h>
void sort(int * a, int len)
{
        int i, j, t;
        for(i = 0; i<len-1; ++i)
        {
                for(j = 0; j<len-1-j; ++j)
                {
                        if(a[j]>a[j+1])
                        {
                                t = a[j];
                                a[j] = a[j+1];
                                a[j+1] = t;
                        }
                }
        }
}
int main(void)
{       
        int a[6]={6, 5, 4, 3, 2, 1};
        int i = 0;

        sort(a,6);//在这里

        for(i = 0; i<6; ++i)
        {
                printf("%d", a[i]);
        }
        printf("\n ");
        return 0;
}
最佳答案
2020-4-8 17:00:49
  1. # include<stdio.h>
  2. void sort(int * a, int len)
  3. {
  4.         int i, j, t;
  5.         for(i = 0; i<len-1; ++i)
  6.         {
  7.                 for(j = 0; j<len-1-j; ++j) //j<len -1 - i才对吧
  8.                 {
  9.                         if(a[j]>a[j+1])
  10.                         {
  11.                                 t = a[j];
  12.                                 a[j] = a[j+1];
  13.                                 a[j+1] = t;
  14.                         }
  15.                 }
  16.         }
  17. }
  18. int main(void)
  19. {      
  20.         int a[6]={6, 5, 4, 3, 2, 1};
  21.         int i = 0;

  22.         sort(a,6);//在这里

  23.         for(i = 0; i<6; ++i)
  24.         {
  25.                 printf("%d", a[i]);
  26.         }
  27.         printf("\n ");
  28.         return 0;
  29. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-8 16:42:21 | 显示全部楼层
我用的编译器是vc++6.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 17:00:49 | 显示全部楼层    本楼为最佳答案   
  1. # include<stdio.h>
  2. void sort(int * a, int len)
  3. {
  4.         int i, j, t;
  5.         for(i = 0; i<len-1; ++i)
  6.         {
  7.                 for(j = 0; j<len-1-j; ++j) //j<len -1 - i才对吧
  8.                 {
  9.                         if(a[j]>a[j+1])
  10.                         {
  11.                                 t = a[j];
  12.                                 a[j] = a[j+1];
  13.                                 a[j+1] = t;
  14.                         }
  15.                 }
  16.         }
  17. }
  18. int main(void)
  19. {      
  20.         int a[6]={6, 5, 4, 3, 2, 1};
  21.         int i = 0;

  22.         sort(a,6);//在这里

  23.         for(i = 0; i<6; ++i)
  24.         {
  25.                 printf("%d", a[i]);
  26.         }
  27.         printf("\n ");
  28.         return 0;
  29. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 17:05:52 | 显示全部楼层
你的排序函数,内层循环的条件写错了。
for(j = 0; j<len-1-j; ++j)
循环结束条件应该是len-1-i,你写成了len-1-j
for(j = 0; j<len-1-i; ++j)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 17:28:08 | 显示全部楼层
双向冒泡,可以看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 17:28:41 | 显示全部楼层
  1. #include<stdio.h>
  2. void buble(int *a,int n)
  3. {
  4.         int i,left = 0,right = n -1,tem;
  5.         while(left < right)
  6.         {
  7.                 for(i = left;i < right;i++)
  8.                 {
  9.                         if(a[i] > a[i+1])
  10.                         {
  11.                                 tem = a[i];
  12.                                 a[i] = a[i+1];
  13.                                 a[i+1] = tem;
  14.                         }
  15.        
  16.                 }
  17.                 right --;
  18.                 for(i = right;i>left;i--)
  19.                 {
  20.                         if(a[i] < a[i-1])
  21.                         {
  22.                                 tem = a[i];
  23.                                 a[i] = a[i-1];
  24.                                 a[i-1] = tem;
  25.                         }
  26.                 }
  27.                 left ++;
  28.         }
  29. }
  30. int main(void)
  31. {
  32.         int len,i=0;
  33.         int a[] = {2,1,4,23,5,6,45,76,4,53,32,54,23,54,23,67,2,1,3,25,6,7,32};
  34.         len = sizeof(a) / sizeof(a[0]);
  35.         buble(a,len);
  36.         while(a[i])
  37.         printf("%d ",a[i++]);
  38. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-23 18:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表