注册 登录
编程论坛 C语言论坛

用指针方法对10个整数按由小到大顺序排序

美美学c 发布于 2023-10-28 20:26, 806 次点击
只有本站会员才能查看附件,请 登录

#include<stdio.h>
int main()
{void v(int *x,int n);
    int a[10];
    int i,*p;
    p=a;
    for(i=0;i<10;i++)
    scanf("%d",p+i);
    v(p,10);
    p=a;
    for(i=0;i<10;i++)
    {printf("   %d  ",*p);
    p++;}
}
void v(int *x,int n)
{int i,j,t;
    for(i=0;i<n;i++)
    {for(j=0;j<n;j++)
        if(*(x+j)<*(x+j+1))
            {t=*(x+j);
            *(x+j)=*(x+j+1);
            *(x+j+1)=t;}
    }
}
从代码结果分析应该是指针的第一个没有获得地址 但是不知道哪里有问题 请大佬帮忙改下
3 回复
#2
forever742023-10-29 09:27
冒泡的j务必和i有关系。
类似
for(i=0;i<n-1;i++)
for(j=i;j<n-1;j++)
#3
rjsp2023-10-29 19:27
首先代码要排版,不能团成一坨屎

程序代码:
#include <stdio.h>

void v( int x[], size_t n );

int main( void )
{
    int a[10];

    const size_t n = sizeof(a)/sizeof(*a);
    for( size_t i=0; i!=n; ++i )
        scanf( "%d", &a[i] );

    v( a, n );

    for( size_t i=0; i!=n; ++i )
        printf( "   %d  ", a[i] );
}

void v( int x[], size_t n )
{
    for( size_t i=0; i!=n; ++i )
    {
        for( size_t j=0; j!=n; ++j ) // 虽然写成 j<n 不算错,但明明只需要 j!=n-1-i
        {
            if( x[j] < x[j+1] ) // 当 j == n-1 时,x[j+1] 已经溢出了,这就是错误所在
            {
                int t = x[j];
                x[j] = x[j+1];
                x[j+1] = t;
            }
        }
    }
}

#4
hxwj2023-12-27 21:00
回复 楼主 美美学c
void v(int *x,int n)
{int i,j,t;
    for(i=0;i<n-1;i++)
    {for(j=0;j<n-1-i;j++)
        if(*(x+j)<*(x+j+1))
            {t=*(x+j);
            *(x+j)=*(x+j+1);
            *(x+j+1)=t;}
    }
}

这样最好!
1