汤姆叔叔的小屋 发表于 2020-4-8 16:41:16

c语言


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

冒泡排列中升序,在主调函数中使用函数是我认为该写成   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>a)
                        {
                                t = a;
                                a = a;
                                a = t;
                        }
                }
        }
}
int main(void)
{       
        int a={6, 5, 4, 3, 2, 1};
        int i = 0;

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

        for(i = 0; i<6; ++i)
        {
                printf("%d", a);
        }
        printf("\n ");
        return 0;
}

汤姆叔叔的小屋 发表于 2020-4-8 16:42:21

我用的编译器是vc++6.0

梦想灬远帆 发表于 2020-4-8 17:00:49

# 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) //j<len -1 - i才对吧
                {
                        if(a>a)
                        {
                              t = a;
                              a = a;
                              a = t;
                        }
                }
      }
}
int main(void)
{      
      int a={6, 5, 4, 3, 2, 1};
      int i = 0;

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

      for(i = 0; i<6; ++i)
      {
                printf("%d", a);
      }
      printf("\n ");
      return 0;
}

sunrise085 发表于 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)

Draem 发表于 2020-4-9 17:28:08

双向冒泡{:5_109:},可以看一下

Draem 发表于 2020-4-9 17:28:41

#include<stdio.h>
void buble(int *a,int n)
{
        int i,left = 0,right = n -1,tem;
        while(left < right)
        {
                for(i = left;i < right;i++)
                {
                        if(a > a)
                        {
                                tem = a;
                                a = a;
                                a = tem;
                        }
       
                }
                right --;
                for(i = right;i>left;i--)
                {
                        if(a < a)
                        {
                                tem = a;
                                a = a;
                                a = tem;
                        }
                }
                left ++;
        }
}
int main(void)
{
        int len,i=0;
        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};
        len = sizeof(a) / sizeof(a);
        buble(a,len);
        while(a)
        printf("%d ",a);
}
页: [1]
查看完整版本: c语言