由一个冒泡排序算法想到的
一个冒泡排序算法C++程序的引申作者:lyb661 12/26/2018
C++排序算法中经常需要交换两个数组元素的位置。例如,有数组
arr[],当arr[j]>arr[j+1]时,要交换两个元素的位置,如果不怕麻烦,只需要打出以下代码:
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
但是,有时我们需要一个通用的代码,如:
void swap_arr(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
第一次使用的交换函数用的不是引用形参,即:
void swap_arr(int a,int b)
{
int temp=a;
a=b;
b=temp;
}
但是在程序运行后,两个元素并没有交换成功。全部程序代码如下:
///冒泡排序实例
#include <iostream>
using namespace std;
void swap_arr(int a,int b)
{
int temp=a;
a=b;
b=temp;
}
void bubble_sort(int a[],int n)
{
for(int i=0;i<n;i++)
for(int j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
swap_arr(a[j],a[j+1]);
}
int main() {
int a[] = {23,25,65,12,33,98,79};
int n=sizeof(a)/sizeof(a[0]);
bubble_sort(a,n);
for(int i = 0;i < n;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
运行结果:
23 25 65 12 33 98 79
Process returned 0 (0x0) execution time : 0.359 s
Press any key to continue.
后来,我想到使用两个引用形参,即:
void swap_arr(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
再次运行,结果令人满意:
12 23 25 33 65 79 98
Process returned 0 (0x0) execution time : 0.375 s
Press any key to continue.
这个结果,使我意识到只有引用形参或指针形参才能改变实参的值。