数据结构作业W6
题号:T233291 【模板题】冒泡排序
题目链接:https://www.luogu.com.cn/problem/T233291
题目描述
读入N个整数,利用冒泡排序法对这些数排序,输出排序后的N个数,两个数之间用空格间隔。
这里排序指的是升序。
输入格式
两行,第一行一个正整数N,表示待排序的数的个数。
第二行为N个整数。
输出格式
一行,排序后的N个数。
输入输出样例
输入
5 4 2 4 5 1
输出
1 2 4 4 5
说明/提示
1≤N≤103
每个数不超过109.
参考代码:
#include <iostream>
using namespace std;
const int maxSize = 1000;//定义一个常量
template <class T>//定义类模板,虚拟类型名为T
void BubbleSort(T arr[], int n)
//实现冒泡排序函数 arr存放带排序的数据 n为数组长度 (1≤N≤103)
{
int a, b, flag;
T temp;//用于交换时使用
for(a = 0; a < n-1; a++)
//进行n-1次 外层循环是比较的轮数 数组内有n个数 就该比较n-1轮
{
flag = 0;//交换标志,0表示无交换,1表示有交换
for(b = 0; b < (n-1-a); b++)
//数组下标最大为n-1 内层循环比较的是当前一轮的比较次数 第1轮比较n-1-1次 第2轮比较n-1-2次 第a轮比较n-1-a次
{
if(arr[b] > arr[b+1])//相邻两个数如果逆序 就交换位置
{
flag = 1;//有交换
temp = arr[b];
arr[b] = arr[b+1];
arr[b+1] = temp;
}
}
if(flag == 0)//无交换,说明已经全部排好序,提前结束
break;
}
}
int main(void)//用main函数
{
int i, n, arr[maxSize];
cin >> n;//输入待排序的数的个数n
for(i = 0; i < n; i++)
cin >> arr[i];//输入待排序的数
BubbleSort(arr, n);
for(i = 0; i < n; i++)
cout << arr[i] << " ";//输出排序后的n个数
cout << endl;
return 0;
}