C语言如何给输入数据排序
时间: 2024-10-13 19:05:19 浏览: 29
C语言中有多种方法可以对输入数据进行排序,常见的有冒泡排序、选择排序、插入排序、快速排序、归并排序等基础排序算法,以及更高级的库函数如qsort()。以下是几种简单排序算法的概述:
1. **冒泡排序**:通过不断交换相邻元素使其逐渐升序或降序排列。适用于小规模数组。
```c
void bubble_sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换 arr[j] 和 arr[j+1]
swap(&arr[j], &arr[j + 1]);
}
}
}
}
```
2. **选择排序**:每次从未排序的部分找出最小(大)元素放到已排序部分的末尾。效率较低。
```c
void selection_sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int min_idx = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
swap(&arr[i], &arr[min_idx]);
}
}
```
3. **插入排序**:将未排序的元素逐个插入到已排序的部分的适当位置。
```c
void insertion_sort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
```
4. **快速排序**:基于分治思想,通常比上述排序更快,平均时间复杂度为O(n log n)。
```c
void quick_sort(int arr[], int low, int high) {
if (low < high) {
/* pi is partitioning index, arr[p] is now at right place */
int pi = partition(arr, low, high);
quick_sort(arr, low, pi - 1); // before pi
quick_sort(arr, pi + 1, high); // after pi
}
}
// Partition function
int partition(int arr[], int low, int high) {
// ...
}
```
此外,标准C库提供`stdlib.h`中的`qsort()`函数,用于直接对任意大小的数组进行快速、高效的排序。记得包含头文件`#include <stdlib.h>`。
阅读全文