c语言二维数组排序函数c++
时间: 2023-12-16 19:02:15 浏览: 140
以下是一个使用 C++ 实现的二维数组排序函数示例:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX_ROWS = 10;
const int MAX_COLS = 10;
bool compare(int* a, int* b) {
return a[0] < b[0];
}
void sort2DArray(int arr[][MAX_COLS], int rows, int cols) {
sort(arr, arr + rows, compare);
}
int main() {
int arr[MAX_ROWS][MAX_COLS] = {{5, 4, 3}, {9, 8, 7}, {2, 1, 0}};
int rows = 3, cols = 3;
sort2DArray(arr, rows, cols);
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
这个示例将一个二维数组按照第一列的值进行升序排序。可以根据需要修改 compare 函数中的比较条件来实现不同的排序方式。
相关问题
二维数组排序c/c++
### 关于C/C++中二维数组排序
#### 使用`qsort`函数对二维数组进行排序
对于C语言中的二维数组,可以利用标准库提供的`qsort`函数来实现排序功能。为了使`qsort`能够处理二维数据结构,需要定义比较器函数,该函数接收两个指向待比较元素的指针,并返回一个整数值指示这两个元素之间的相对顺序[^1]。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义比较器用于按列优先级升序排列
int compare(const void *a, const void *b){
int rowA = *(int *)a;
int rowB = *(int *)b;
// 假设每行有固定的列数COLS
static int COLS = 3;
// 这里简单地按照第一个元素大小决定先后次序
return (*(int*)a - *(int*)b);
}
void sortMatrix(int matrix[][3], size_t rows){
qsort(matrix, rows, sizeof(int)*3, compare);
}
```
上述代码片段展示了如何创建自定义的比较逻辑并将其应用于整个矩阵。注意这里假设每一行都有相同数量的列(即固定宽度),并且仅基于首项来进行简单的升序排列。
#### 利用STL算法在C++中操作二维向量
而在C++环境中,则更推荐采用标准模板库(STL),特别是当涉及到动态分配内存或者复杂的数据类型时。下面的例子说明了怎样借助`std::vector<std::vector<int>>`以及内置的<algorithm>头文件里的工具完成同样的任务:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp(vector<int>& v1,vector<int>& v2){
// 自定义比较规则:比如依据首个元素从小到大排
return v1[0]<v2[0];
}
int main(){
vector<vector<int>> mat={{7,8},{4,5},{9,6}};
cout << "Before sorting:" << endl;
for(auto& r : mat){
for(auto c:r)cout<<c<<" ";
cout<<"\n";
}
stable_sort(mat.begin(),mat.end(),cmp);
cout << "\nAfter sorting:\n";
for(auto& r : mat){
for(auto c:r)cout<<c<<" ";
cout<<"\n";
}
return 0;
}
```
这段程序首先展示未排序前的状态,接着调用了`stable_sort()`配合定制化的比较谓词`cmp`实现了稳定性的排序过程;最后再次遍历输出已排序的结果集。此方式不仅限定了具体的维度数目,而且允许更加灵活地调整内部元素间的相互关系[^3]。
C++二维数组排序
### 如何对C++中的二维数组进行排序
在C++中,可以利用标准库函数`std::sort()`来实现对二维数组的排序操作。为了完成这一目标,通常需要定义自定义比较器(Comparator),以便指定按照何种规则对二维数组中的子数组进行排序。
以下是具体方法以及代码示例:
#### 使用 `std::vector<std::vector<int>>` 实现二维数组排序
通过使用STL容器`std::vector`,我们可以更方便地处理动态大小的二维数组,并借助`std::sort()`对其进行排序。
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
bool compare(const std::vector<int>& a, const std::vector<int>& b) {
if (a[0] == b[0]) { // 如果第一个元素相同,则按第二个元素升序排列
return a[1] < b[1];
}
return a[0] < b[0]; // 否则按第一个元素升序排列
}
int main() {
std::vector<std::vector<int>> array = {{3, 2}, {1, 9}, {2, 4}, {3, 1}};
std::sort(array.begin(), array.end(), compare);
for (const auto& row : array) {
for (int elem : row) {
std::cout << elem << " ";
}
std::cout << "\n";
}
return 0;
}
```
上述代码实现了基于两个维度的排序逻辑:先依据每行的第一个元素升序排列;如果第一个元素相等,则进一步依据第二列的值进行升序排列[^3]。
#### 原始二维数组排序方式
对于固定大小的传统二维数组,可以通过指针传递给`qsort()`或者手动编写交换逻辑配合冒泡等方式完成排序任务。然而推荐优先考虑现代C++风格的做法即采用`std::vector`结构简化开发流程并增强可读性和安全性。
下面展示了一个简单的例子说明如何针对原始二维数组执行基本排序:
```cpp
#include <stdio.h>
// 自定义比较函数用于 qsort()
int cmpfunc(const void* a, const void* b){
int *ia = *(int**)a;
int *ib = *(int**)b;
if( ia[0]==ib[0] )return ia[1]-ib[1];
else return ia[0]-ib[0];
}
int main(){
int data[][2]={
{3 ,2},
{1 ,9},
{2 ,4},
{3 ,1}
};
size_t rows=sizeof(data)/sizeof(*data);
qsort((void*)data,(size_t)rows,sizeof(int)*2,&cmpfunc);
for(size_t i=0;i<rows;i++)printf("%d %d\n",data[i][0],data[i][1]);
return 0;
}
```
此版本展示了另一种途径——运用经典的C语言特性来进行同样类型的多维数据集整理工作。尽管如此,在实际项目当中还是建议尽可能依赖于更高层次抽象所提供的工具和服务以减少潜在错误风险同时提高程序效率。
阅读全文
相关推荐













