一个数组,写一个程序可以把任何一个位置上值放到适当位置(也就是右边都比这个值大,左边都比这个值小)
时间: 2024-03-15 18:44:29 浏览: 147
这个问题可以用快速排序的思想来解决。
具体思路如下:
1. 选择一个基准值(pivot),通常选择数组的第一个元素。
2. 从数组的第二个元素开始,依次和基准值进行比较,如果比基准值小,就把它和当前的左边界交换位置,并把左边界往右移动一位。
3. 当遍历完整个数组后,把基准值和左边界交换位置,这样基准值就在适当的位置上了。
4. 对基准值左边的子数组和右边的子数组分别递归重复上述步骤,直到整个数组有序。
下面是示例代码:
```python
def partition(arr, low, high):
"""
分区函数,把数组划分为左右两部分
"""
i = low - 1 # i 表示左边界
pivot = arr[high] # pivot 表示基准值
for j in range(low, high):
if arr[j] <= pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return i+1
def quick_sort(arr, low, high):
"""
快速排序函数
"""
if low < high:
pivot_index = partition(arr, low, high)
quick_sort(arr, low, pivot_index-1)
quick_sort(arr, pivot_index+1, high)
# 测试代码
arr = [3, 7, 2, 5, 9, 1, 4, 6, 8]
quick_sort(arr, 0, len(arr)-1)
print(arr)
```
输出结果为:
```
[1, 2, 3, 4, 5, 6, 7, 8, 9]
```
可以看到,数组已经被排序了。如果要把任何一个位置上的值放到适当位置,只需要先把它放到数组的最后一个位置,然后再进行一次快速排序即可。
阅读全文