山东大学数据结构实验二
要求
- 不得使用与实验相关的STL
- 需使用类模版(
template<class T>
) - 需定义排序类,封装各排序方法
- 排序数据需使用动态数组存储
- 排序类需提供以下操作:名次排序、及时终止的选择排序、及时终止的冒泡排序、插入排序
描述
用任意一种排序方式给出n个整数按升序排序后的结果
格式
输入
输入的第一行是一个整数 n(1<=n<=1000),表示需排序的数的个数。接下来一行是 n 个整数,数的范围是 0 到 1000,每两个相邻数据间用一个空格分隔。
输出
一行排好序的序列
样例一
输入
5
5 3 4 2 1
输出
1 2 3 4 5
限制
1s, 1024KiB for each test case.
/* created by LYZ */
#include<iostream>
using namespace std;
template <class T>
class sort{
public:
void rearrange(T a[], int n,int r[]);//基数排序
void selectionSort(T a[], int n);//及时终止选择排序
void bubbleSort(T a[], int n);//及时终止的冒泡排序
void insertionSort(T a[], int n);//插入排序
sort(){}
};
template <class T>
void rank(T a[], int n, int r[])//求出数组中每个元素的名次
{
for (int i = 0; i < n; i++)r[i] = 0;
for (int i = 1; i < n;i++)
for (int j = 0; j < i; j++)
{
if (a[j] < a[i])r[i]++;
else r[j]++;
}
}
template <class T>
void sort<T>::rearrange(T a[], int n,int r[]){//利用rank函数得到的名次进行排序
T *u = new T[n];
for (int i = 0; i < n; i++)u[r[i]] = a[i];
delete[]u;
}
template<class T>
void sort<T>::selectionSort(T a[], int n){//及时终止的选择排序
bool sorted = false;
for (int size = n; !sorted && (size>1); size--)
{
int indexOfMax = 0;
sorted = true;
for (int i = 0; i < size; i++){
if (a[indexOfMax] <= a[i])indexOfMax = i;
else sorted = false;
swap(a[indexOfMax], a[size - 1]);
}
}
}
template< class T>
bool bubble(T a[], int n){//一次冒泡,为及时终止的冒泡排序做准备
bool swapped = false;
for (int i = 0; i < n - 1; i++){
if (a[i]>a[i + 1]){
swap(a[i], a[i + 1]);
swapped = true;
}
}
return swapped;
}
template<class T>
void sort<T>::bubbleSort(T a[], int n){
for (int i = n; i > 1 && bubble(a, i); i--);//冒泡排序,及时跳出
}
template<class T>
void insert(T a[], int n, const T&x)
{
int i;
for (int i = n - 1; i >= 0 && x < a[i]; i--)
a[i + 1] = a[i];
a[i + 1] = x;//将x插入到数组a 之中去
}
template<class T>
void sort<T>::insertionSort(T a[], int n){
for (int i = 1; i < n; i++)
{
T t = a[i];
insert(a,i,t);
}
}//插入排序
int main(){
int n;
cin >> n;
int *a = new int[n];
for (int i = 0; i < n; i++)
cin >> a[i];
/*sort<int> arraySort;*/
sort<int> arraySort = sort<int>();
arraySort.selectionSort(a, n);
for (int i = 0; i < n; i++)cout << a[i] << " ";
delete[]a;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?