C++题目要求:用冒泡法对二维数组排序,设计3个函数:主函数、数据输入函数和冒泡排序函数。主函数定义数组,调用另外两个函数并输出排好序的数组。设二维数组为5行5列。 数据输入函数的原型为: void Input sz(int a[][5]); 冒泡排序的函数原型为: void Bubble sort (int a[][5]); 二维数组的冒泡排序函数可以参考一维数组的冒泡排序函数。 一维数组的冒泡排序 函数的主体部分如下(参考主教材例5.10,假设数组有5个元素): flag=1; for(j=1;j<=4&&flag;j++) //j 循环控制比较的趟数,此处比较4趟 { flag=0; //设定未交换数据(结束扫描)标志 for(i=0;i<=4-j;i++) //i 循环控制每趟循环比较的次数,每趟次数不同 if (a[i]>a[i+1]) //比较相邻的两个数(向后比较) { t=a[i]; //如果前面元素值大,就交换这两个元素 a[i]=a[i+1]; a[i+1]=t; flag=1; //发生了数据交换,设置继续下 一 趟扫描标志 } 可以将5行5列的二维数组理解成具有25个元素的一维数组,这样第2行可以写 成:for(j=1;j<=24&&flag;j++), 第4行可以写成:for(i=0;i<=24-j;i++)。 这 时第5至第8行的数组元素不能用一维的形式表示。可以使用一种变换,将 i 分解为行 和列两个下标。设用a[il][j1] 替代第5行的a[i], 用 a[i2][j2] 替代 a[i+1], 则有下列变 换式 : i1=i/5 j1=i%5 i2=(i+1)/5 j2=(i+1) 号5 有了上述这个变换式后,二维数组的冒泡排序函数便迎刃而解了。请读者自行完成 该程序。
时间: 2024-01-21 17:02:44 浏览: 76
好的,以下是C++程序,实现了冒泡排序对二维数组的排序,包括主函数、数据输入函数和冒泡排序函数:
```cpp
#include <iostream>
using namespace std;
void Input(int a[][5]) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
cout << "请输入第" << i+1 << "行第" << j+1 << "列的元素:";
cin >> a[i][j];
}
}
}
void BubbleSort(int a[][5]) {
int flag = 1;
for (int j = 1; j <= 24 && flag; j++) {
flag = 0;
for (int i = 0; i <= 24 - j; i++) {
int i1 = i / 5, j1 = i % 5, i2 = (i + 1) / 5, j2 = (i + 1) % 5;
if (a[i1][j1] > a[i2][j2]) {
int temp = a[i1][j1];
a[i1][j1] = a[i2][j2];
a[i2][j2] = temp;
flag = 1;
}
}
}
}
int main() {
int arr[5][5];
Input(arr);
BubbleSort(arr);
cout << "排序后的数组为:" << endl;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
注意,在冒泡排序函数中,我们需要将一维数组的下标i转换为二维数组的下标i1和j1,以及i2和j2,这样才能对二维数组进行排序。
阅读全文