Python3 程序重新排列数组,如果 i 是偶数,则 arr[i] >= arr[j] 如果 i 是奇数且 j < i,则 arr[i]<=arr[j]
给定一个包含 n 个元素的数组。我们的任务是编写一个程序来重新排列数组,使得偶数位置的元素大于它之前的所有元素,奇数位置的元素小于它之前的所有元素。
例子:
Input : arr[] = {1, 2, 3, 4, 5, 6, 7}
Output : 4 5 3 6 2 7 1
Input : arr[] = {1, 2, 1, 4, 5, 6, 8, 8}
Output : 4 5 2 6 1 8 1 8
解决这个问题的思路是首先创建原始数组的辅助副本,并对复制的数组进行排序。现在具有 n 个元素的数组中偶数位置的总数将是 floor(n/2),剩余的是奇数位置的数量。现在使用排序数组以以下方式填充原始数组中的奇数和偶数位置:
- 奇数仓位总数为 n – floor(n/2)。从排序数组中的第 (n-floor(n/2)) 个位置开始,并将元素复制到排序数组的第一个位置。开始从这个位置向左遍历排序后的数组,并继续向右填充原始数组中的奇数位置。
- 从第 (n-floor(n/2)+1) 位置开始向右遍历排序数组,并从第 2 位置开始填充原始数组。
下面是上述想法的实现:
Python3
# Python3 code to rearrange the array
# as per the given condition
import array as a
import numpy as np
# function to rearrange the array
def rearrangeArr(arr, n):
# total even positions
evenPos = int(n / 2)
# total odd positions
oddPos = n - evenPos
# initialising empty array in python
tempArr = np.empty(n, dtype = object)
# copy original array in an
# auxiliary array
for i in range(0, n):
tempArr[i] = arr[i]
# sort the auxiliary array
tempArr.sort()
j = oddPos - 1
# fill up odd position in original
# array
for i in range(0, n, 2):
arr[i] = tempArr[j]
j = j - 1
j = oddPos
# fill up even positions in original
# array
for i in range(1, n, 2):
arr[i] = tempArr[j]
j = j + 1
# display array
for i in range(0, n):
print (arr[i], end = ' ')
# Driver code
arr = a.array('i', [ 1, 2, 3, 4, 5, 6, 7 ])
rearrangeArr(arr, 7)
# This code is contributed by saloni1297
输出:
4 5 3 6 2 7 1
时间复杂度:O(n logn)
辅助空间:O(n)
请参阅有关重新排列数组的完整文章,如果 i 是偶数,则 arr[i] >= arr[j],如果 i 是奇数,则 arr[i]<=arr[j] 并且 j < i 以获得更多详细信息!