有一个一维整数数组(2n+1个元素,其中n为大于1的正整数),编写程序将小于第n+1个元素值的元素移到其左侧,而大于第n+1个元素值的 元素移到其右
时间: 2024-05-15 16:20:03 浏览: 36
侧,使得数组的前n个元素都小于第n+1个元素,后n个元素都大于第n+1个元素。
具体实现可以使用双指针,左指针指向数组开头,右指针指向数组结尾,循环遍历数组,当左指针指向的元素大于第n+1个元素时,停止移动,当右指针指向的元素小于第n+1个元素时,停止移动,然后交换左右指针指向的元素。接着,左指针向右移动一位,右指针向左移动一位,继续循环遍历数组,直到左指针和右指针相遇为止。
以下是具体代码实现:
```python
def partition(arr):
n = len(arr)
mid = arr[n//2]
left, right = 0, n-1
while left <= right:
while arr[left] < mid:
left += 1
while arr[right] > mid:
right -= 1
if left <= right:
arr[left], arr[right] = arr[right], arr[left]
left += 1
right -= 1
return arr
```
测试一下:
```python
arr = [7, 6, 5, 4, 3, 2, 1, 10, 9, 8]
print(partition(arr)) # 输出 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
```
可以看到,数组中前7个元素都小于第8个元素,后3个元素都大于第8个元素。
阅读全文