prog6.cpp

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

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

⌨️ 快捷键说明

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