鱼C论坛

 找回密码
 立即注册
查看: 813|回复: 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
# 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[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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 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[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;
}
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
#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[i] > a[i+1])
                        {
                                tem = a[i];
                                a[i] = a[i+1];
                                a[i+1] = tem;
                        }
        
                }
                right --;
                for(i = right;i>left;i--)
                {
                        if(a[i] < a[i-1])
                        {
                                tem = a[i];
                                a[i] = a[i-1];
                                a[i-1] = 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[0]);
        buble(a,len);
        while(a[i])
        printf("%d ",a[i++]);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 12:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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