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

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

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; 
}

排序不是对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; 
}


#define N 10
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void sort (int n, int *p) {
    int i,j,k;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(p[j]>p[j+1])
            {
                k=p[j];
                p[j]=p[j+1];
                p[j+1]=k;
            }
        }
    }
}
int main()
{
    int a[N],i,p;//a[N]是待排序的数组 
    for(i=0;i<N;i++)
    {
        p=rand();
        printf("%d  ",p);
        a[i]=p;
    }
    sort(N,a); 
    printf("排序后为\n");
    for(i=0;i<N;i++)
    {
        printf("%d  ",a[i]);
    }
    return 0; 
}



#define N 10
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
    srand(time(NULL));
    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;
    // }
    p = a;
    for (i = 0; i < N - 1; i++)
    {
        for (j = i; j < N; j++)
        {
            if (*(p + i) > *(p + j))
            {
                t = *(p + i);
                *(p + i) = *(p + j);
                *(p + j) = t;
            }
        }
    }

    printf("\n排序后为\n");
    // p = b;
    for (i = 0; i < N; i++, p++)
    {
        // printf("%d  ", a[*p]);
        printf("%d  ", *p);
    }
    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632