大码连帽皮夹克:用指针实现冒泡排序

来源:百度文库 编辑:高校问答 时间:2024/04/28 08:49:59
大家帮我看看哪里错了?
/* HELLO.C -- Hello, world */
#include <stdio.h>
#include<conio.h>
void pp(int a[]);
void main()
{
int a[5];
int i;
printf("请输入5个要排序的数:");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
pp(a);
for(i=0;i<5;i++)
{
printf("%d",a[i]);
}
getch();
}

void pp(int a[])
{
int *p,swap,i,j;
p=&a[4] ;
for(j=0;j<5;j++)
{
for(i=0;i<5-j;i++)
{
if(*p>*(p--))
{
swap=*p;
*p=*(p--);
*(p--)=swap;

}
p=p--;
}
p=&a[4];
}
}

你对++,--的理解严重错误,
if(*p>*(p--))直接导致了你进行这个判断之后的p指向的位置已经偏移了,下面的交换也就自然不正确,至于下面用到--的地方也都不对,建议你找本书好好看一看这个的介绍,如果不会用就p-1或者p=p-1好了

#include <stdio.h>
#define N 5
void main()
{
int *p,number[N],i,temp,j;
printf("请你输入%d个正整数:",N);
for(i=0;i<N;i++)
{
scanf("%d",&number[i]);
}
printf("\n你刚才输入的%d个数是:",N);
p=number;
for(i=0;i<N;i++)
{
printf("\t%d",*p);
p++;
}

printf("\n\n下面是用指针实现冒泡排序\n");
printf("------------------------------\n");
printf("升序排序后的结果:");
//下面是用指针实现冒泡排序
p=number;
for(i=0;i<N;i++)
{
for(j=1;j<N-i;j++)
{
if(*(p+j-1)<*(p+j))
{
temp=*(p+j-1);
*(p+j-1)=*(p+j);
*(p+j)=temp;
}
}

}
//排序后输出结果
p=number;
for(i=0;i<N;i++)
{
printf("\t%d",*p);
p++;
}
printf("\n");

}