用指针方法对10个整数按由小到大顺序排列(冒泡排序法),我的代码哪错了,谢谢,求解答? 初学C语言,谅解
问题描述:
#include <stdio.h>
int main()
{
void sort(int *p,int n);
int a[10],*p,i;
p = a;
for (i=0;i<10;i++)
scanf ("%d",p++);
sort(p,10);
for (p=a,i=0;i<10;i++)
{
printf ("%d\n",*p);
p++;
}
return 0;
}
void sort(int *p,int n)
{
int i,j,temp;
for (j=0;j<n-1;j++)
for (i=0;i<n-1-j;i++)
if (*(p+i)>*(p+i+1))
{
temp = *p;
*p = *(p+1);
*(p+1) = temp;
}
}
答
#include <stdio.h>
int main()
{
void sort(int *p, int n);
int a[10], *p, i;
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
sort(a, 10);
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
void sort(int *a, int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j<n - 1 - i; j++)
{
if (a[j]>a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
答
有两处错误
#include <stdio.h>
int main()
{
void sort(int *p,int n);
int a[10],*p,i;
p = a;
for (i=0;i<10;i++)
scanf ("%d",p++);、
//用a,不能用p,p在上面p++了,如果不再初始化,下面会造成越界
sort(a,10);
for (p=a,i=0;i<10;i++)
{
printf ("%d\n",*p);
p++;
}
return 0;
}
void sort(int *p,int n)
{
int i,j,temp;
int *a;
a=p;
for (j=0;j<n-1;j++){
for (i=0;i<n-1-j;i++)
{
if (*(p+i)>*(p+i+1))
{
//交换的部分你写错了,位置是i和第i+1位交换
temp = *(p+i);
*(p+i) = *(p+i+1);
*(p+i+1) = temp;
}
}
}
}