用指针实现冒泡排序~~~

来源:百度知道 编辑:UC知道 时间:2024/05/14 06:29:45
今天看书有道题是使用指针实现冒泡排序,我编了段程序代码感觉很别扭
void main()
{
int a[3],i,j,k=0,*p;
printf("输入3个数");
p=a;
for(i=0;i<3;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<3;i++)
{
for(j=0;j<3-i-1;j++)
{
if(*(p+j)>*(p+j+1))
{
k=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=k;
}
}
}
for(i=0;i<3;i++)
{
printf("%d ",a[i]);
}

}

我觉的这样做很是麻烦,可能我没看明白题,不知道是不是有更方便的指针表达方式,望各位朋友指点下!
这道题就是要求用指针做的..
指针我用的还不是很熟练

相当地别扭
我觉得利用指针来移动,而不是通过 i , j 这两个下标

#define NULL 0

void OrderByPointer(const int * array)
{
int length = 0;
int *p1 = NULL;
int *p2 = NULL;
int temp = 0;
p1 = array;

if(array == NULL)
{
return;
}

while(p1 != NULL)
{
length ++;
}

if(length == 0 )
{
return;
}

for(int i=0; i<length; i++)
{
p1 = p2 = array + i;
while(++p1 != NULL)
{
if(*p1 > *p2)
{
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
p2 ++;
}
}

}

这样会不会好点?

也没见着有多麻烦啊......这不挺清楚的?
你要是还觉得不舒服, 你就用 p[j] 代替 *(p + j)