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