赞
踩
原创不易,转载请注明出处。欢迎点赞收藏~
插入排序是一种简单直观的排序算法,它的基本思想是将待排序的元素分为已排序和未排序两部分,每次从未排序部分中选择一个元素插入到已排序部分的合适位置,直到所有元素都插入到已排序部分,完成排序。
具体的插入排序算法如下:
插入排序的时间复杂度为O(n^2),其中n表示待排序元素的个数。最好情况下,如果待排序元素已经有序,那么插入排序的时间复杂度为O(n)。最坏情况下,如果待排序元素逆序,那么插入排序的时间复杂度为O(n^2)。 插入排序的空间复杂度为O(1),它只需要常数级别的额外空间用于存储临时变量。
值得注意的是,插入排序在处理小规模数据或者部分有序的数据时,表现优于其他复杂度更高的排序算法,因为它具有稳定性、原地排序等特点。然而,在面对大规模乱序数据时,插入排序的效率相对较低,不如快速排序、归并排序等高效排序算法。
以下是一个用C语言编写的插入排序的示例代码:
- #include <stdio.h>
-
- // 插入排序函数
- void insertion_sort(int arr[], int n)
- {
- int i, key, j;
- for (i = 1; i < n; i++)
- {
- key = arr[i];
- j = i - 1;
-
- while (j >= 0 && arr[j] > key)
- {
- arr[j + 1] = arr[j];
- j--;
- }
-
- arr[j + 1] = key;
- }
- }
-
- int main()
- {
- int arr[] = {5, 2, 8, 12, 3};
- int n = sizeof(arr) / sizeof(arr[0]);
-
- printf("排序前的数组:\n");
- for (int i = 0; i < n; i++)
- {
- printf("%d ", arr[i]);
- }
-
- insertion_sort(arr, n);
-
- printf("\n排序后的数组: \n");
- for (int i = 0; i < n; i++)
- {
- printf("%d ", arr[i]);
- }
- putchar('\n');
-
- return 0;
- }

在这个示例中,我们定义了一个insertion_sort
函数来实现插入排序算法。该函数以一个整型数组和数组长度作为参数,并对数组进行原地排序。
在main
函数中,我们创建了一个示例数组arr
,然后调用insertion_sort
函数对数组进行排序。最后,我们使用printf
函数输出排序后的结果。
运行这段代码,你可以看到以下输出:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。