1.编写起泡(冒泡)排序法,要求输入一串无序数据,输出一串排好序的数据: 例如输入:3 8 1 9 5 7 4 6 0 2,输出:0 1 2 3 4 5 6 7 8 9 并分析算法的时间复杂度和空间复杂度。
时间: 2024-09-12 21:16:15 浏览: 35
数据结构教学课件:第21讲 交换排序.pdf
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
以下是一个用Python编写的冒泡排序的示例代码:
```python
def bubble_sort(arr):
n = len(arr)
for i in range(n):
# 提前退出冒泡循环的标志位
flag = False
# 进行一轮冒泡,将最大的数放到最后
for j in range(1, n-i):
if arr[j-1] > arr[j]:
arr[j-1], arr[j] = arr[j], arr[j-1]
flag = True
# 如果这一轮没有发生交换,说明已经有序,可以提前退出
if not flag:
break
return arr
# 测试冒泡排序函数
input_arr = [3, 8, 1, 9, 5, 7, 4, 6, 0, 2]
output_arr = bubble_sort(input_arr)
print('排序后的数组:', output_arr)
```
时间复杂度分析:
- 最好情况:如果输入的数据已经是正序,那么只需遍历一次即可,因此最好情况下的时间复杂度为O(n)。
- 最坏情况:如果输入的数据是反序,那么需要进行n-1次冒泡才能完成排序,因此最坏情况下的时间复杂度为O(n^2)。
- 平均情况:对于随机数据,冒泡排序的平均时间复杂度也是O(n^2)。
空间复杂度分析:
- 冒泡排序是在原数组上进行操作,除了输入的数组外,只需要一个临时变量来交换元素,因此空间复杂度为O(1)。
阅读全文