源程序:
//*******************************
//程序:冒泡排序
//描述:用外層趟數和內層交換數完成
//輸入:用數組輸入
//輸出:用顯示器輸出
//其他:
//*******************************
#include <iostream>
#include <string>
#define N 5
using namespace std;
//冒泡排序的子程序(模塊)
//作者:張三
class student //類:student
{
private: //聲明私有變量
int num;
char name[20];
char sex[2];
int age;
public:
student(){}; //默認的構造函數
student(int n,char na[20],char se[2],int ag) //重載的構造函數
{
num=n;
strcpy(name,na);
strcpy(sex,se);
age=ag; //用重載的構造函數的參數,給私有變量初始化
}
void show(); //顯示結果的函數
friend void bubble_sort(student stud[],int); //冒泡排序,用友元函數
};
void student::show() //在類之外定義show()這個函數
{
cout<<'\t'<<num<<'\t'<<name<<'\t'<<sex<<'\t'<<age<<endl;
}
//友元函數不是類的成員,所以在類之外不寫類名
void bubble_sort(student stud[],int n)
{
int i,j;
student temp;
for(i=0;i<n;i++) //外層循環控制第幾趟
{
for(j=0;j<n-i-1;j++) //內層循環是比較相鄰的兩個數
{
if(strcmp(stud[j].name,stud[j+1].name)>0) //如果前面的數>后面的數
{
temp=stud[j];
stud[j]=stud[j+1];
stud[j+1]=temp; //三個語句完成交換
}
}
}
}
//主程序由老師寫,子程序由張三同學寫
int main()
{
int i;
student stu[N]={student(1001,"zhsan","m",20),
student(1002,"lisi","f",21),
student(1003,"wangwu","m",19),
student(1004,"zhaoli","f",21),
student(1005,"liug","m",20)}; //用構造函數定義5個學生
printf("\n\t按學生姓名排序,采用冒泡排序法:\n\n");
printf("\t學號\t姓名\t性別\t年齡\n");
for(i=0;i<N;i++) //循環輸出5個數
{
bubble_sort(stu,N);
stu[i].show();
cout<<endl; //每顯示一個人,就換行
}
return 1;
}
運行結果: