python用非递归的形式实现冒泡排序。
时间: 2024-12-02 22:18:49 浏览: 19
在Python中,我们可以使用双指针的方式来实现非递归形式的冒泡排序。这种算法通过比较相邻元素并交换它们的位置,使得每次遍历都能将未排序部分的最大值“冒”到数组的一端。以下是详细的步骤:
1. 定义两个指针,一个叫做`i`表示当前已排序部分的结尾,另一个叫做`j`表示未排序部分的开始。
2. 进行嵌套循环,外层循环从0到n-1(其中n是列表长度),内层循环从0到i-1。
3. 内层循环中,如果`arr[j]`大于`arr[j+1]`,则交换这两个元素。这个过程会把最大的元素逐步“冒”到`arr[i]`位置。
4. 每次外层循环结束后,`i`都会增加1,因为已经确定了`arr[i]`及其右侧都是有序的,所以不需要再检查这部分。
5. 当外层循环结束时,整个数组就会被排序完成。
下面是相应的Python代码实现:
```python
def bubble_sort_non_recursive(arr):
n = len(arr)
for i in range(n - 1): # 主循环,外层控制遍历次数
swapped = False # 标记是否进行了交换,用于优化
for j in range(0, n - i - 1): # 内层循环,不断缩小待排序范围
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j] # 交换元素
swapped = True # 如果有交换,则标志为True
# 如果一轮下来没发生交换,说明已经有序,可以提前结束
if not swapped:
break
return arr
# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = bubble_sort_non_recursive(arr)
print("Sorted array:", sorted_arr)
阅读全文