问题描述
- C++ 将n个数按输入时的顺序逆序排出时遇到的问题
-
//将n个数按输入时的顺序逆序排出
void sort(int *p,int n){
int *p1,*p2,temp;
for(int i=0;i<n/2;i++)
{ p1=p+i;// p2=p+(n-1-i);//这两句为什么可以这么写??具体是什么意思?半懂不懂··· temp=*p1; *p1=*p2; *p2=temp; }
}
int main()
{
int n,*p,num[20];
cin>>n;
int i;
for(i=0;i
{
cin>>num[i];
}
p=&num[0];
sort(p,n);
for( i=0;i<n;i++)
{
cout<<num[i]<<" ";
}
return 0;}
ps:不用指针的话有更好的办法吗?
解决方案
交换p[i]和p[n-1-i]
p[i]也可以写成p+i。
比如
0 1 2 3 4 5
n=6
那么交换 0(0) 5(6-1-0)
1(1) 4(6-1-1)
2 3
得到
5 4 3 2 1 0
解决方案二:
相当于把数组第一个元素和最后一个元素做交换,依次进行
p1=p+i;// 数组第一个元素地址
p2=p+(n-1-i);//数组最后一个元素地址
解决方案三:
p1=p+i;p2=p+(n-1-i);
p1,p2是两个指针,指向待交换的两个数字的空间,后面再做交换。
就像楼上所说的,可以把一级指针当成一个一维数组,按照数组的方式来书写。
解决方案四:
p1=p+i;//p是一个指针,就是指向一个地址,加1就指向它后面第一个地址,加2就指向它的后面的第二个地址
p2=p+(n-1-i);//同理
解决方案五:
把第一个数和最后一个交换,然后把第二个数和倒数第二个数交换,....... 最后输出的就是你想要的喽。
时间: 2024-10-24 06:24:29