读书人

求解惑求解惑解决办法

发布时间: 2013-01-18 10:22:42 作者: rapoo

求解惑求解惑
本帖最后由 sdu20112013 于 2013-01-13 15:42:15 编辑


#include <iostream>
using namespace std;

class Array
{
int num;
int *p;
public:
void init() //初始化
{
cout<<"请输入数组元素个数"<<endl;
cin>>num;
p=new int[num];
cout<<endl;
cout<<"请依次输入数据"<<endl;
for(int i=0;i<num;i++)
{
int data;
cin>>data;
p[i]=data;
}
sort(p,num);
delete []p;
}

void sort(int a[],int num)
{
int index=num;
bool flag=true;
while(flag)
{
flag=false;
for(int i=1;i<index;i++)
{
if(a[i-1]>a[i])
{
swap(a[i-1],a[i]);
flag=true;

}
}
index--;
}
for(int j=0;j<num;j++)
{
cout<<a[j]<<endl;
}
}

void swap(int a,int b)
{
int temp;
if(a>b)
{
temp=a;
a=b;
b=temp;
}
}

};

int main()
{
Array *p=new Array;
p->init();

delete p;
return 0;
}

红色部分,调用swap的时候,通过单步调试,知道在swap内部a,b的值是交换了的。但是调用完之后,数组内的值并未发生交换,为何?如果一定要通过调用swap的方式,该如何修改?(不要说把swap内部代码直接写到for循环内部)。多谢!
[解决办法]


void swap(int &a,int &b)
{
int temp;
if(a>b)
{
temp=a;
a=b;
b=temp;
}
}

读书人网 >C++

热点推荐