exam5.cpp

来自「C++语言程序设计题典」· C++ 代码 · 共 171 行

CPP
171
字号
#include <iostream.h>  
#define Max 100
class Sample
{
	int A[Max];
	int n;
	friend class process;
public:
	Sample() { n=0; }
};
class process
{
    void qsort(Sample &s,int l,int h);  //私有成员,由quicksort()成员调用
public:
	void getdata(Sample &s);     //获取数据
	void insertsort(Sample &s);  //插入排序
    void shellsort(Sample &s);   //希尔排序
    void bubblesort(Sample &s);  //冒泡排序
    void quicksort(Sample &s);   //快速排序
    void selectsort(Sample &s);  //选择排序
	void disp(Sample &s);
};
void process::getdata(Sample &s)
{
	int i;
	cout << "元素个数:";
	cin >> s.n;
	for (i=0;i<s.n;i++)
	{
		cout << "输入第" << i+1 << "个数据:";
		cin >> s.A[i];
	}
}
void process::insertsort(Sample &s) //插入排序
{
	int i,j,temp;
	for(i=1;i<s.n;i++)
	{
		temp=s.A[i];
		j=i-1;
        while (temp<s.A[j])
		{
			s.A[j+1]=s.A[j];
			j--;
		}
		s.A[j+1]=temp;
	}
}
void process::shellsort(Sample &s) //希尔排序
{
	int i,j,gap,temp;
	gap=s.n/2;
    while (gap>0)
	{
		for(i=gap;i<s.n;i++)
		{
			j=i-gap;
			while (j>=gap)
				if (s.A[j]>s.A[j+gap])
				{
					temp=s.A[j];
					s.A[j]=s.A[j+gap];
					s.A[j+gap]=temp;
					j=j-gap;
				}
				else j=0;
		}
		gap=gap/2;
	}
}
void process::bubblesort(Sample &s)  //冒泡排序
{
	int i,j,temp;
	for(i=0;i<s.n;i++)
		for(j=s.n-1;j>=i+1;j--)
			if(s.A[j]<s.A[j-1])
			{
				temp=s.A[j];
				s.A[j]=s.A[j-1];
				s.A[j-1]=temp;
			}
}
void process::quicksort(Sample &s)  //快速排序
{
	qsort(s,0,s.n-1);
}
void process::qsort(Sample &s,int l,int h)
{
	int i=l,j=h,temp;
	if(l<h)
	{
        temp=s.A[l];
		do
		{
			while (j>i && s.A[j]>=temp)
			j--;
			if(i<j)
			{
				s.A[i]=s.A[j];
				i++;
			}
			while (i<j && s.A[i]<=temp)
				i++;
			if (i<j)
			{
				s.A[j]=s.A[i];
				j--;
			}
		} while(i<j);
		s.A[i]=temp;		
		qsort(s,l,j-1);
		qsort(s,j+1,h);
	}
}
void process::selectsort(Sample &s) //选择排序
{
	int i,j,k,temp;
	for (i=0;i<s.n;i++)
	{
		k=i;
		for (j=i+1;j<=s.n-1;j++)
			if (s.A[j]<s.A[k])
				k=j;
		temp=s.A[i];
		s.A[i]=s.A[k];
		s.A[k]=temp;
	}
}
void process::disp(Sample &s)
{
	for (int i=0;i<s.n;i++)
		cout << s.A[i] << " ";
	cout << endl;
}
void main()
{
	int sel;
	Sample s;
	process p;
	p.getdata(s);
	cout << "原来序列:";
	p.disp(s);
	cout << "0:插入排序 1:希尔排序 2:冒泡排序 3:快速排序 4:选择排序 其他退出" << endl;
	cout << "选择排序方法:";
	cin >> sel;
	switch (sel)
	{
	case 0:
		p.insertsort(s);
		cout << "插入排序结果:";
		break;
	case 1:
		p.shellsort(s);
		cout << "希尔排序结果:";
		break;
    case 2:
		p.bubblesort(s);
		cout << "冒泡排序结果:";
		break;
	case 3:
		p.quicksort(s);
		cout << "快速排序结果:";
		break;
	case 4:
		p.selectsort(s);
		cout << "选择排序结果:";
		break;
	}
	p.disp(s);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?