数据结构作业W7

发布时间 2023-04-22 13:30:06作者: T-Yoriichi

题号:T233291 【模板题】冒泡排序

题目链接:https://www.luogu.com.cn/problem/T233291

题目描述

读入N个整数,利用冒泡排序法对这些数排序,输出排序后的N个数,两个数之间用空格间隔。

这里排序指的是升序。

输入格式

两行,第一行一个正整数N,表示待排序的数的个数。

第二行为N个整数。

输出格式

一行,排序后的N个数。

输入输出样例

输入 
5
4 2 4 5 1
输出 
1 2 4 4 5

说明/提示

1N103

每个数不超过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;
}