利用指针实现二维数组从大到小排序输出
时间: 2024-03-03 17:21:32 浏览: 23
下面是一个使用指针实现二维数组从大到小排序并输出的代码:
```
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10;
bool cmp(int *a, int *b) {
return *a > *b;
}
int main() {
int a[N][N];
int *p[N * N];
int k = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
a[i][j] = rand() % 100;
p[k++] = &a[i][j];
}
}
sort(p, p + N * N, cmp);
for (int i = 0; i < N * N; i++) {
cout << *p[i] << " ";
}
cout << endl;
return 0;
}
```
这段代码的主要思路是:将二维数组的每一个元素地址存储在指针数组`p`中,然后对指针数组排序,最后通过指针数组输出二维数组的元素。
相关问题
利用指针实现5行4列二维数组从大到小排序
好的,这个问题属于编程问题,我可以帮您回答。以下是利用指针实现5行4列二维数组从大到小排序的代码:
```
#include <stdio.h>
#define ROW 5 // 定义行数
#define COL 4 // 定义列数
// 交换两个数的值
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
// 比较两个数的大小
int cmp(int a, int b)
{
return a < b;
}
// 二维数组排序
void arr_sort(int (*arr)[COL])
{
int i, j, k;
int *p;
for (i = 0; i < ROW; ++i) {
for (j = 0; j < COL; ++j) {
p = *(arr + i) + j;
for (k = j+1; k < COL; ++k) {
if (cmp(*(arr+i)[k], *p)) {
p = *(arr+i) + k;
}
}
if (p != *(arr+i)+j) {
swap(p, *(arr+i)+j);
}
}
}
}
int main()
{
int arr[ROW][COL] = { {5, 9, 3, 7},
{2, 8, 1, 6},
{4, 0, 2, 9},
{7, 5, 6, 8},
{1, 3, 4, 0} };
arr_sort(arr);
int i, j;
for (i = 0; i < ROW; ++i) {
for (j = 0; j < COL; ++j) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
```
这个代码中,我们定义了一个 `arr_sort` 函数来对二维数组进行排序,最后输出排序后的结果。如果您有任何问题或者需要进一步的帮助,请随时告诉我。
c语言利用行指针传参实现二维数组的每一行按从小到大排序
可以使用指针数组和qsort函数来实现该功能。具体实现步骤如下:
1. 定义一个指针数组,每个元素都是指向二维数组的一行的指针。
2. 将每一行的指针存储到指针数组中。
3. 定义一个比较函数,用于比较两行数据的大小关系。
4. 使用qsort函数对指针数组进行排序,排序时使用自定义的比较函数。
5. 排序完成后,指针数组中的元素就按照从小到大的顺序排列了,即二维数组的每一行也按照从小到大的顺序排列了。
下面是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROWS 3
#define COLS 4
int cmp(const void *a, const void *b) {
int *pa = *(int **)a;
int *pb = *(int **)b;
return *pa - *pb;
}
void sort_rows(int arr[][COLS], int rows) {
int *row_ptrs[rows];
for (int i = 0; i < rows; i++) {
row_ptrs[i] = arr[i];
}
qsort(row_ptrs, rows, sizeof(int *), cmp);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < COLS; j++) {
arr[i][j] = row_ptrs[i][j];
}
}
}
int main() {
int arr[ROWS][COLS] = {{3, 2, 1, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
sort_rows(arr, ROWS);
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
```
在该代码中,我们首先定义了一个指针数组`row_ptrs`,它的每个元素都是一个指向二维数组的一行的指针。然后,我们将每一行的指针存储到指针数组中。接着,我们定义了一个比较函数`cmp`,用于比较两行数据的大小关系。在`sort_rows`函数中,我们使用qsort函数对指针数组进行排序,排序时使用自定义的比较函数。排序完成后,我们再将排序后的指针数组中的元素复制回原来的二维数组中,这样二维数组的每一行就都按照从小到大的顺序排列了。最后,在main函数中,我们调用`sort_rows`函数对二维数组进行排序并输出结果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)