在C语言中,可以使用多种算法来实现排序,包括冒泡排序、选择排序、插入排序、归并排序和快速排序。以下是这些排序算法的简要介绍和C语言代码实现:
冒泡排序
原理:通过多次比较相邻的两个元素,并在必要时交换它们的位置来进行排序。
时间复杂度:O(n²)
代码实现:
```c
void BubbleSort(int *a, int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
```
选择排序
原理:每次从未排序的部分中找到最小(或最大)的元素,将其放到已排序部分的末尾。
时间复杂度:O(n²)
代码实现:
```c
void SelectionSort(int *a, int n) {
int i, j, min_index;
for (i = 0; i < n - 1; i++) {
min_index = i;
for (j = i + 1; j < n; j++) {
if (a[j] < a[min_index]) {
min_index = j;
}
}
if (min_index != i) {
int temp = a[i];
a[i] = a[min_index];
a[min_index] = temp;
}
}
}
```
插入排序
原理:将第一个元素视为有序序列,将剩余元素逐个插入到有序序列中,保持有序性。
时间复杂度:O(n²)
代码实现:
```c
void InsertSort(int *a, int n) {
int i, j, key;
for (i = 1; i < n; i++) {
key = a[i];
j = i - 1;
while (j >= 0 && a[j] > key) {
a[j + 1] = a[j];
j--;
}
a[j + 1] = key;
}
}
```
归并排序
原理:采用分治策略,将序列分为两半,递归对两半进行排序,然后合并排序后的两半。
时间复杂度:O(n log n)
代码实现: