用C语言完整的代码实现插入排序算法,并分析算法的时间复杂度。
时间: 2023-12-01 15:55:08 浏览: 32
以下为C语言完整的插入排序算法代码:
```
#include <stdio.h>
void insertSort(int arr[], int len) {
int i, j, temp;
for (i = 1; i < len; i++) {
temp = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
int main() {
int arr[] = { 5, 2, 8, 3, 9, 1 };
int len = sizeof(arr) / sizeof(int);
insertSort(arr, len);
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
插入排序算法的时间复杂度为O(n^2),其中n为待排序序列的长度。具体分析如下:
最好情况:如果待排序序列已经有序,那么插入排序算法只需要进行n-1次比较,时间复杂度为O(n)。
最坏情况:如果待排序序列是倒序的,那么插入排序算法需要进行n(n-1)/2次比较和交换,时间复杂度为O(n^2)。
平均情况:平均情况下,插入排序算法需要进行n(n-1)/4次比较和交换,时间复杂度仍然为O(n^2)。
因此,插入排序算法的时间复杂度为O(n^2),在大规模数据排序时效率较低,但对于小规模数据排序效率较高。