你的代码的问题是,当二维数组作为一维数组的时候,元素不是连续存放的,即3个元素之后的97个元素都是随机数,然后才是下一行
而你排序的是前面这6个数字
学校的题
3、矩阵(三)
编写C++程序完成以下功能:
(1)用类来实现矩阵,定义一个矩阵的类,属性包括:
1.矩阵大小,用 lines, rows(行、列来表示);
2.存贮矩阵的数组指针,根据矩阵大小动态申请(new)。
(2)矩阵类的方法包括:
1.构造函数,参数是矩阵大小,需要动态申请存贮矩阵的数组;
2.析构函数,需要释放矩阵的数组指针;
3.拷贝构造函数,需要申请和复制数组;
4.输入,可以从cin中输入矩阵元素;
5.输出,将矩阵格式化输出到cout;
6.矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵类,但必须矩阵大小相同;
7.矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵类,但必须矩阵大小相同。
我可以提供一个使用指针实现二维数组排序的简单示例代码:
#include <iostream>
using namespace std;
void sort2DArray(int **arr, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
// 冒泡排序
for (int k = 0; k < cols - j - 1; k++) {
if (arr[i][k] > arr[i][k+1]) {
// 交换元素
int temp = arr[i][k];
arr[i][k] = arr[i][k+1];
arr[i][k+1] = temp;
}
}
}
}
}
int main() {
int **arr; // 声明一个指向指针的指针,表示二维数组
int rows, cols;
cout << "请输入二维数组的行数和列数:" << endl;
cin >> rows >> cols;
// 动态申请二维数组内存
arr = new int *[rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
}
// 输入二维数组的值
cout << "请输入二维数组的值:" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> arr[i][j];
}
}
// 排序
sort2DArray(arr, rows, cols);
// 输出排序后的二维数组
cout << "排序后的二维数组为:" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
// 释放内存
for (int i = 0; i < rows; i++) {
delete[] arr[i];
}
delete[] arr;
return 0;
}
在这个示例中,首先我们通过动态申请内存来创建一个二维数组,然后输入数据并调用一个名为sort2DArray的函数来排序这个数组。注意,在函数中使用指针可以访问二维数组的值。最后,我们也必须在程序终止前释放所使用的内存,以免造成内存泄漏。