C语言怎么用指针冒泡排序法排列二维数组
时间: 2024-12-13 18:05:23 浏览: 23
在C语言中,使用指针来实现二维数组的冒泡排序,首先要理解指针的概念,因为它允许我们间接访问数组元素。下面是一个基本的例子,展示了如何使用指针和嵌套循环来对二维整型数组进行冒泡排序:
```c
#include <stdio.h>
// 定义一个辅助函数,接受一个指向一维数组的指针和数组长度
void bubbleSort(int (*arr)[N], int rows, int cols) {
int i, j, temp, isSwapped;
for (i = 0; i < rows - 1; i++) { // 遍历每一行
for (j = 0; j < cols - 1; j++) { // 比较并交换每一列
isSwapped = 0; // 初始假设没交换
int *p1 = arr + i * N + j; // 指向当前比较的元素
int *p2 = p1 + 1; // 指向下一个元素
if (*p1 > *p2) {
temp = *p1; // 临时保存较大值
*p1 = *p2; // 将较小值赋给第一个位置
*p2 = temp; // 将较大值赋给第二个位置
isSwapped = 1; // 发生了交换
}
// 如果没有发生交换,提前跳出内层循环,提高效率
if (!isSwapped)
break;
}
}
}
int main() {
const int M = 3, N = 4; // 二维数组的行数和列数
int arr[M][N] = {{9, 5, 1, 6},
{8, 2, 7, 4},
{3, 0, 10, 11}};
int *pArray = arr; // 将二维数组转换为一维指针
bubbleSort(pArray, M, N); // 传递指针和数组维度
// 打印排序后的二维数组
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", arr[i][j]); // 注意这里使用的是二维数组名,而非指针
}
printf("\n");
}
return 0;
}
```
这段代码首先将二维数组转换为一维指针,然后通过指针传递给冒泡排序函数。排序完成后,再按原样打印出二维数组。注意在主函数中打印二维数组时,使用的是数组名 `arr` 而非指针,因为我们实际上是想输出二维数组的内容。
阅读全文