我需要使偶数索引arr [0],arr [2],arr [4]中的所有元素都小于奇数索引arr [1],arr [3],arr [5 ]等
我的方法是找到MEDIAN,然后在奇数索引中写出所有小于中位数的元素,并在偶数位置写出所有大于中位数的元素。
问题:找到中位数后,有没有办法在数组中进行数组改组?
import random
def quickselect(items, item_index):
def select(lst, l, r, index):
# base case
if r == l:
return lst[l]
# choose random pivot
pivot_index = random.randint(l, r)
# move pivot to beginning of list
lst[l], lst[pivot_index] = lst[pivot_index], lst[l]
# partition
i = l
for j in range(l+1, r+1):
if lst[j] < lst[l]:
i += 1
lst[i], lst[j] = lst[j], lst[i]
# move pivot to correct location
lst[i], lst[l] = lst[l], lst[i]
# recursively partition one side only
if index == i:
return lst[i]
elif index < i:
return select(lst, l, i-1, index)
else:
return select(lst, i+1, r, index)
if items is None or len(items) < 1:
return None
if item_index < 0 or item_index > len(items) - 1:
raise IndexError()
return select(items, 0, len(items) - 1, item_index)
def shuffleArray(array, median):
newArray = [0] * len(array)
i = 0
for x in range(0,len(array),2):
newArray[x] = array[i]
i+=1
for y in range(1,len(array),2):
newArray[y] = array[i]
i+=1
return newArray
答案 0 :(得分:1)
这是我对问题的解释。
对数组进行混洗,以使偶数索引中的所有数据都小于奇数索引中的所有数据。
例如
[1, 3, 2, 4]
有效,但[1, 2, 3, 4]
无效。
这使我们无法对数组进行排序。
[1, 2, 3]
和数组[4, 5, 6]
就变成了[1, 4, 2, 5, 3, 6]
。要详细说明3,下面是一些示例代码...(使用javascript)
let a = [ 1, 2, 3 ];
let b = [ 4, 5, 6 ];
let c = [ ] // this will be the sorted array
for (let i = 0; i < a.length + b.length; i++ ) {
if(i % 2 == 0) c.push( a[Math.floor( i/2 )]);
else c.push( b[Math.floor( i/2 )]);
}
这将生成数组[1、4、2、5、3、6],我认为它满足了要求。