鱼C论坛

 找回密码
 立即注册
查看: 3923|回复: 6

C语言排序

[复制链接]
发表于 2013-5-20 19:47:05 | 显示全部楼层 |阅读模式
1鱼币
#include <stdio.h>
#include <stdlib.h>
#define N 30
void print(int *p)
{
        int i,n=0;
    for (i=0;i<N;i++)
    {
                printf("%3d",p[i]);
        n++;
        if(n%10==0)
        printf("\n");
    }
}
void sort(int *p,int n)
{
        int i,j,temp;
    for (i=0;i<n;i++)
    {
                temp=p[i];
        for(j=i+1;j<n;j++)
        {
                        if (p[i]>p[j])
            {
                                p[i]=p[j];
                p[j]=temp;
            }
        }
    }
}
int main()
{
        int a[N],i;
    system("color 15");
    for (i=0;i<N;i++)
                a[i]=rand()%100;
    print(a);
    printf("-------------------------------\n");
    sort(a,N);
    print(a);
        return 0;
}
大虾帮忙看下,哪出错了???经排序后有的数出现好多次,有的数没了

最佳答案

查看完整内容

sort函数有一行你写错了 自己对比下 #include #include #define N 40 void print(int *p) { int i,n=0; for (i=0;i
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-20 19:47:06 | 显示全部楼层
sort函数有一行你写错了
自己对比下


#include <stdio.h>
#include <stdlib.h>
#define N 40
void print(int *p)
{
        int i,n=0;
    for (i=0;i<N;i++)
    {
                printf("%3d",p[i]);
        n++;
        if(n%10==0)
        printf("\n");
    }
}
void sort(int *p,int n)
{
    int i,j,temp;
    for (i=0;i<n;i++)
    {
       //
        for(j=i+1;j<n;j++)
        {
            if (p[i]>p[j])
            {
                                temp=p[i];
                p[i]=p[j];
                p[j]=temp;
            }
        }
    }
}
int main()
{
        int a[N],i;
    system("color 15");
    for (i=0;i<N;i++)
                a[i]=rand()%100;
    print(a);
    printf("-------------------------------\n");
    sort(a,N);
    print(a);
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-20 20:14:51 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>
#define N 30
void f(int *p)
{
        int i,n=0;
    for (i=0;i<N;i++)
    {
        printf("%3d",p[i]);
        n++;
        if(n%10==0)
        printf("\n");
    }
}
void sort(int *p,int n)
{
        int i,j,temp;
    for (i=0;i<(n-1);i++)
    {     temp=p[i];
        for(j=i+1;j<n;j++)
        {
                         if (p[i]>p[j])
            {
                 temp=p[j];
                                p[j]=p[i];
                                p[i]=temp;
            }
        }
    }
}
int main()
{
     int a[N],i;
    system("color 18");
    for (i=0;i<N;i++)
        a[i]=rand()%100;            
    f(a);
    printf("-------------------------------\n");
    sort(a,N);
    f(a);
        return 0;
}

其他的地方都没有问题,就是在定义对数组进行排列的那个函数上出了点问题,我已经修改了,你看看行不行,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-20 20:15:06 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>
#define N 30
void print(int *p)
{
        int i,n=0;
    for (i=0;i<N;i++)
    {
                printf("%3d",p[i]);
        n++;
        if(n%10==0)
                        printf("\n");
    }
}
void sort(int *p,int n)
{
        int i,j,temp;
    for (i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
                        if (p[i]>p[j])
            {
                                temp=p[i];
                                p[i]=p[j];
                p[j]=temp;
            }
        }
    }
}
int main()
{
        int a[N],i;
    system("color 15");
    for (i=0;i<N;i++)
                a[i]=rand()%100;
    print(a);
    printf("-------------------------------\n");
    sort(a,N);
    print(a);
        return 0;
}
你应该用的是选择法排序吧,最好养成注释的习惯。你刚才那个temp=p[i]在for外面是把最大的给p[i]了,但是你p[j]每次却从temp取的值,而你里面的整个for循环并未改变temp的值,所以就出现很多重复的数值了。另外这种问题建议自己调试找出错误这样印象才深。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-20 22:26:45 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-22 13:03:50 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-24 23:11:19 | 显示全部楼层
无回帖,不论坛,这才是人道。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-28 02:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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