数组的排序c语言
时间: 2023-09-12 15:12:55 浏览: 41
在 C 语言中,可以使用库函数 `qsort()` 进行数组排序。具体实现如下:
```c
#include <stdlib.h>
/* 比较函数,用于确定排序顺序 */
int cmp(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {3, 1, 4, 5, 2};
int size = sizeof(arr) / sizeof(arr[0]);
qsort(arr, size, sizeof(int), cmp);
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这里以整型数组为例,`qsort()` 函数的参数依次是数组名、数组元素个数、每个元素的大小和比较函数。比较函数用于确定排序顺序,如果 a 小于 b,返回负数,如果 a 等于 b,返回 0,如果 a 大于 b,返回正数。上面的比较函数实现了升序排序。
相关问题
n元数组排序c语言分治算法使用快速排序
根据提供的引用内容,我们可以了解到快速排序算法和归并排序算法都是常见的排序算法,其中快速排序算法采用分治的思想,而归并排序算法则是将两个及其以上的有序表合并为一张有序表。下面是使用快速排序算法对n元数组进行排序的C语言代码示例:
```c
#include <stdio.h>
// 快速排序函数
void quick_sort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quick_sort(arr, left, i - 1);
quick_sort(arr, i + 1, right);
}
int main() {
int arr[] = {5, 8, 7, 6, 4, 3, 9};
int n = sizeof(arr) / sizeof(arr[0]);
quick_sort(arr, 0, n - 1);
printf("排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
上述代码中,我们定义了一个`quick_sort`函数来实现快速排序算法,其中`arr`表示待排序的数组,`left`和`right`表示数组的左右边界。在函数中,我们首先判断左右边界是否相遇,如果相遇则返回;否则,我们选取数组的第一个元素作为基准数`pivot`,然后从右往左找到第一个小于`pivot`的数,从左往右找到第一个大于`pivot`的数,将这两个数交换位置,直到左右指针相遇。最后,我们将基准数放到相遇的位置上,然后递归地对基准数左右两边的子数组进行排序。
二维数组排序 c语言 二维数组排序 {1, 4, 3, 2}, {8, 6, 7, 5}, {9, 11, 10, 12} 排序结果为 {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}
可以使用冒泡排序或者快速排序来对二维数组进行排序。
以下是使用冒泡排序的示例代码:
```c
#include <stdio.h>
void bubble_sort(int arr[][4], int n) {
int i, j, temp;
for (i = 0; i < n; i++) {
for (j = 0; j < 4; j++) {
for (int k = 0; k < 4 - j - 1; k++) {
if (arr[i][k] > arr[i][k + 1]) {
temp = arr[i][k];
arr[i][k] = arr[i][k + 1];
arr[i][k + 1] = temp;
}
}
}
}
}
int main() {
int arr[][4] = {{1, 4, 3, 2}, {8, 6, 7, 5}, {9, 11, 10, 12}};
bubble_sort(arr, 3);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
```
输出结果为:
```
1 2 3 4
5 6 7 8
9 10 11 12
```
以上代码中,`bubble_sort` 函数使用了三层循环,最外层循环控制行数,中间的两层循环控制列数和冒泡排序的过程。
另外,如果使用快速排序,可以先将二维数组转换为一维数组,排序完成后再转换回来。