C语言对二维数组快速排序
时间: 2023-05-17 08:02:49 浏览: 156
可以使用qsort函数来对二维数组进行快速排序,具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return (*(int **)a)[0] - (*(int **)b)[0];
}
void sort(int **arr, int n) {
qsort(arr, n, sizeof(int *), cmp);
}
int main() {
int arr[3][2] = {{3, 1}, {2, 5}, {1, 4}};
int *p[3] = {arr[0], arr[1], arr[2]};
sort(p, 3);
for (int i = 0; i < 3; i++) {
printf("%d %d\n", p[i][0], p[i][1]);
}
return 0;
}
```
这段代码可以对一个3行2列的二维数组进行排序,输出结果为:
```
1 4
2 5
3 1
```
其中,cmp函数是用来比较两个二维数组元素大小的函数,sort函数是用来对二维数组进行排序的函数,main函数中的arr是一个3行2列的二维数组,p是一个指向arr中每一行的指针数组,通过调用sort函数对p进行排序,最后输出排序后的结果。
相关问题
C语言对二维字符数组快速排序
可以使用qsort函数对二维字符数组进行快速排序,具体实现可以参考以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
int cmp(const void *a, const void *b) {
return strcmp(*(char **)a, *(char **)b);
}
int main() {
char str[MAX_LEN][MAX_LEN];
int n;
printf("请输入字符串个数:");
scanf("%d", &n);
printf("请输入字符串:\n");
for (int i = 0; i < n; i++) {
scanf("%s", str[i]);
}
qsort(str, n, sizeof(str[0]), cmp);
printf("排序后的字符串为:\n");
for (int i = 0; i < n; i++) {
printf("%s\n", str[i]);
}
return 0;
}
对于二维字符数组的快速排序,我们需要自定义一个比较函数cmp,该函数的作用是比较两个字符串的大小关系。在主函数中,我们先输入字符串的个数和具体内容,然后调用qsort函数进行排序,最后输出排序后的结果。
如何在C语言中对二维数组进行排序?
在C语言中,对二维数组进行排序通常需要先将其转换成一维数组,然后再进行排序,因为C标准库函数如`qsort()`或`sort()`都是针对一维数组设计的。以下是一个通用步骤:
1. **提取元素**:
首先,你需要遍历二维数组,将所有元素复制到临时的一维数组中。
```c
int temp[rows * cols], data[row][col];
for(int i = 0; i < rows; i++) {
for(int j = 0; j < col; j++) {
temp[i * col + j] = data[i][j];
}
}
```
2. **选择排序算法**:
然后你可以选择你喜欢的排序算法,比如冒泡排序、插入排序、快速排序、归并排序等。这里以冒泡排序为例:
```c
void bubble_sort(int arr[], int n) {
for(int i = 0; i < n - 1; i++) {
for(int j = 0; j < n - 1 - i; j++) {
if(arr[j] > arr[j+1]) {
// Swap arr[j+1] and arr[j]
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
```
3. **排序数组**:
对临时的一维数组应用上述排序函数:
```c
bubble_sort(temp, rows * col);
```
4. **更新二维数组**:
排序完成后,将结果反向复制回二维数组:
```c
for(int i = 0; i < rows; i++) {
for(int j = 0; j < col; j++) {
data[i][j] = temp[i * col + j];
}
}
```
注意:这只是一个基本示例,实际操作可能需要考虑数组的具体类型(例如整型、字符型等)以及边界条件。如果你需要稳定的排序算法,建议使用`qsort`函数,并提供比较函数指针。
阅读全文