weixin_54910555 2023-10-22 16:56 采纳率: 20%
浏览 5
已结题

c语言 选择排序 练习 再执行时报段错误

选择排序
代码如下

#include<stdio.h>

void xuhuan(int *p ,int n)
{
    int i,j,sum,t;
    for(i=0;i<n-1;i++)
    {
        sum=i;
        for(j=j+1;j<n;j++)
        {
            if(p[sum]>p[j])
            {
                sum=j;
            }
        }
        if(p[sum]<p[i])
        {
            t=p[sum];
            p[sum]=p[i];
            p[i]=t;
        }
    }
}

int main()
{
    int aa[5]={10,55,12,64,19};
    int cc=0;
    xuhuan(aa, 5);
    for(cc=0;cc<5;cc++)
    {
        printf("%d",aa[cc]);
    }
    printf("\n");
    return 0;
}
执行结果:
是段错误;

是我传递函数参数有什么问题吗?

  • 写回答

2条回答 默认 最新

  • 柯本 2023-10-22 17:16
    关注

    也是找了半天,j和i实在太相近了。。。

    
    #include <stdio.h>
    void xuhuan(int *p, int n)
    {
      int i, j, sum, t;
      for (i = 0; i < n - 1; i++)
        {
          sum = i;
          for (j = i + 1; j < n; j++) //关键错,你原是j=j+1
            {
              if (p[sum] > p[j])
                {
                  sum = j;
                }
            }
          if (sum != i) //应该是这个吧
            {
              t = p[sum];
              p[sum] = p[i];
              p[i] = t;
            }
        }
    }
    int main()
    {
      int aa[5] = {10, 55, 12, 64, 19};
      int cc = 0;
      xuhuan(aa, 5);
      for (cc = 0; cc < 5; cc++)
        {
          printf("%d ", aa[cc]);
        }
      printf("\n");
      return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 创建了问题 10月22日