📅  最后修改于: 2023-12-03 15:39:51.726000             🧑  作者: Mango
插入排序是一种简单的排序算法,它的基本思想是将一个待排序的序列分成一个有序段和一个无序段,每次将无序段的第一个元素插入到有序段的合适位置,直到无序段为空,整个序列就变成了有序的。
下面是插入排序的C程序实现,包括从小到大和从大到小两种排序方式。
void insertion_sort_asc(int arr[], int n) {
int i, j, temp;
for (i = 1; i < n; i++) {
temp = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
void insertion_sort_desc(int arr[], int n) {
int i, j, temp;
for (i = 1; i < n; i++) {
temp = arr[i];
j = i - 1;
while (j >= 0 && arr[j] < temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
插入排序包含两个函数:insertion_sort_asc和insertion_sort_desc。
排序后的数组直接存在传入的数组中,没有返回值。
调用函数前,需要先定义一个数组,然后把数组和数组元素个数作为参数传入排序函数中即可。
int main() {
int arr[] = {3, 1, 4, 2, 5};
int n = sizeof(arr) / sizeof(int);
insertion_sort_asc(arr, n);
// insertion_sort_desc(arr, n); 从大到小排序
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
插入排序算法的时间复杂度为O(n^2)。该算法在处理少量数据时效率比较高,但成本增长较快,排序大量数据时效率较低,不适合处理大规模数据。在处理大规模数据时,可以考虑使用快速排序、归并排序等高效的排序算法来提高效率。
markdown片段:
# 插入排序的C程序介绍
插入排序是一种简单的排序算法,它的基本思想是将一个待排序的序列分成一个有序段和一个无序段,每次将无序段的第一个元素插入到有序段的合适位置,直到无序段为空,整个序列就变成了有序的。
下面是插入排序的C程序实现,包括从小到大和从大到小两种排序方式。
## 实现代码
```c
void insertion_sort_asc(int arr[], int n) {
int i, j, temp;
for (i = 1; i < n; i++) {
temp = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
void insertion_sort_desc(int arr[], int n) {
int i, j, temp;
for (i = 1; i < n; i++) {
temp = arr[i];
j = i - 1;
while (j >= 0 && arr[j] < temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
插入排序包含两个函数:insertion_sort_asc和insertion_sort_desc。
排序后的数组直接存在传入的数组中,没有返回值。
调用函数前,需要先定义一个数组,然后把数组和数组元素个数作为参数传入排序函数中即可。
int main() {
int arr[] = {3, 1, 4, 2, 5};
int n = sizeof(arr) / sizeof(int);
insertion_sort_asc(arr, n);
// insertion_sort_desc(arr, n); 从大到小排序
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
插入排序算法的时间复杂度为O(n^2)。该算法在处理少量数据时效率比较高,但成本增长较快,排序大量数据时效率较低,不适合处理大规模数据。在处理大规模数据时,可以考虑使用快速排序、归并排序等高效的排序算法来提高效率。