OneCrazyJoe 2022-12-03 16:09 采纳率: 100%
浏览 39
已结题

用指向数组的指针,实现数组排序

用指向数组的指针,实现数组排序(从小到大版本)
下面是这个题目我的代码,但是不能输出排序后的版本
请问应该怎么改,改后的代码是什么样的?

img

#define N 10
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main()
{
    int a[N],*p,min,t;//a[N]是待排序的数组 
    int b[N]={0,1,2,3,4,5,6,7,8,9};//b[N]是a[N]的角标 
    int i,j;
    
    p=a;
    for(i=0;i<N;i++,p++)
    {
        *p=rand();
        printf("%d  ",*p);
    }
    
    p=b;
    for(i=0;i<N;i++,p++)
    {
        min=*p;
        for(j=i+1;j<N;j++,p++)
        {
            if(a[*p]<a[min])
           {
               min=*p;
           }
        }
        t=min;
        min=b[i];
        b[i]=t;
    }
    
    printf("排序后为\n");
    p=b;
    for(i=0;i<N;i++,p++)
    {
        printf("%d  ",a[*p]);
    }
    
    return 0; 
}
  • 写回答

5条回答 默认 最新

  • 关注

    排序不是对a排序吗,下面怎么变成p = b了
    还有就是,随机数生成需要先设置随机数种子。
    代码修改如下:

    #define N 10
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    #include <time.h>
    int main()
    {
        int a[N],*p,*q,*min,t;//a[N]是待排序的数组 
        //int b[N]={0,1,2,3,4,5,6,7,8,9};//b[N]是a[N]的角标 
        int i,j;
        srand(time(0));
        p=a;
        for(i=0;i<N;i++,p++)
        {
            *p=rand();
            printf("%d  ",*p);
        }
        p=a;
        for(i=0;i<N;i++,p++)
        {
            min = p;
            q = p;
            for(j=i;j<N;j++,q++)
            {
                if(*q<*min)
                {
                    min=q;
                }
            }
            t = *p;
            *p = *min;
            *min = t;
        }
        printf("排序后为\n");
        p=a;
        for(i=0;i<N;i++,p++)
        {
            printf("%d  ",*p);
        }
        return 0; 
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 专家修改了标签 12月3日
  • 创建了问题 12月3日

悬赏问题

  • ¥100 科大讯飞语音唤醒词,unbuntu环境,报错
  • ¥15 可以实现这个有不同背景颜色的九九乘法表吗?
  • ¥50 python写segy数据时出错2
  • ¥20 关于R studio 做精确稳定检验的问题!(语言-r语言)
  • ¥50 用贝叶斯决策方法,设计CAD程序
  • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)
  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?
  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除? HKEY_CLASSES_ROOT*\shellex\ContextMenuHandlers 没用