k-way merge sort python

时间:2013-07-03 06:14:31

标签: python-2.7 n-way-merge

def left_child(i):
    return 2*i+1

def right_child(i):
    return 2*i+2


def kway_merge(elements):
    Build_heap(elements)
    sub_array_size = len(elements)
    sort_Array = []
    sort_Array.append(elements[0])
    print "Sorted Array in Descending order", sort_Array

def heapify(nums,i,size):
    l = left_child(i)
    r = right_child(i)
    if l <= size and r <= size:
        if r != size:
            if nums[l] >= nums[r]:
                max_element = nums[l]
                max_index = l
            elif nums[l] <= nums[r]:
                max_element = nums[r]
                max_index = r
            if nums[i] >= max_element:
                print nums
                return
            elif nums[i] <= max_element:
                nums[i],nums[max_index] = max_element,nums[i]
                heapify(nums,max_index,size)
        else:
            nums[i],nums[l] = nums[l],nums[i]
            print nums


def Build_heap(elements):
    #actual_size = size*s
    size = len(elements)
    print "the size of the List is : %d " %size
    iterate = size//2-1
    for i in range(iterate,-1,-1):
        print "In %d iteration" %i
        heapify(elements,i,size)
    print "heapified array is : " ,elements

if __name__ == '__main__':
    nums = [[5,10,15,20],[6,3,16,9],[2,9,26,40],[8,22,23,24]]
    print "Input array: ",nums
    initial_array = []
    for i in range(len(nums)):
        initial_array.append(nums[i][0])
        print initial_array
    kway_merge(initial_array)

到目前为止的输出: 输入数组:

  

[[5,10,15,20],[6,3,16,9],[2,9,26,40],[8,22,23,24]]

     

[5]

     

[5,6]

     

[5,6,2]

     

[5,6,2,8]

     

List的大小是:4

     

在1次迭代中

     

[5,8,2,6]

     

在0迭代中

     

[8,6,2,5]

     

heapified数组是:[8,6,2,5]

     

按降序排序数组[8]

0 个答案:

没有答案