给我写一个对n个数从小到大排的插入排序算法代码并分析其时间复杂度
时间: 2024-10-21 17:12:45 浏览: 15
当然可以,下面是一个使用Python编写的插入排序算法,用于对一组整数按照升序进行排序:
```python
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >=0 and key < arr[j] :
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
# 测试用例
numbers = [9, 7, 5, 11, 12, 2, 14, 3]
insertion_sort(numbers)
print("Sorted array is:", numbers)
```
在这个插入排序过程中:
- 第一次遍历时,只有一个元素,无需比较。
- 第二次遍历,将第二个元素与第一个元素进行比较,并在其前面合适的位置插入。
- 后续遍历继续此过程,每次都检查当前元素是否小于前一个元素,如果是,则依次将比当前元素大的元素向右移位,直到找到合适的位置插入。
时间复杂度分析:
- 对于最好的情况(即数组已经有序),插入排序只需遍历一次数组,时间复杂度是O(n)。
- 对于最坏的情况(即数组反向排列),每个元素都会移动到其最终位置,需要进行n-1次比较和交换,所以时间复杂度是O(n^2)。
- 平均情况下,由于部分元素会在适当位置插入,不会频繁移动,整体时间复杂度依然大约为O(n^2),但在实际应用中,对于近乎有序的数据,性能会更好。
阅读全文