注册 登录
编程论坛 C++教室

由一个冒泡排序算法想到的

lyb661 发布于 2018-12-26 11:06, 2097 次点击
一个冒泡排序算法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.
这个结果,使我意识到只有引用形参或指针形参才能改变实参的值。
4 回复
#2
lyb6612018-12-26 11:07
#3
Jonny02012018-12-26 11:35
继续努力, 还有很长的路要走
#4
花脸2018-12-26 19:50

也可以用指针。
void swap(int *a,int *b)
{
    int t=*a;
    *a=*b;
    *b=t;
}
#5
lyb6612018-12-27 09:30
甚至模板函数:
template <class T>
void swap_arr(T & x, T & y)
{
    T tmp = x;
    x = y;
    y = tmp;
}
  
1