首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Python上的快速排序调用插入排序函数

从Python上的快速排序调用插入排序函数
EN

Stack Overflow用户
提问于 2019-10-01 21:42:59
回答 1查看 131关注 0票数 0

我想知道有没有人能帮我?我有一个简单的2/3行代码,可以通过Python调用另一个函数,但似乎无法理解。原始的quicksort2工作,插入排序工作,但是--对函数的调用不起作用(它们位于同一个目录中)--有人知道该怎么做吗?谢谢。我会把这两个代码都贴在下面。

赋值明确规定:,当n个≤16时,Quicksort2将不对列表进行分区,而是调用插入排序。这意味着我需要一个简单的if-elif语句在我的快速排序2函数中,但是无法确定该做什么。

代码语言:javascript
复制
# insertion sort function for an array 
def insertion_sort(array_values):

    for i in range(1, len(array_values)):

        # condition for previous index greater than current index
        while i > 0 and array_values[i - 1] > array_values[i]:

            # setting our previous index as current index, and current index as previous index
            array_values[i - 1], array_values[i] = array_values[i], array_values[i - 1]

            # decrementing index at i for index pointer
            i -= 1

# testing our insertion sort with a given array of values
array_values = [38,89,27,77,16,86,29,20,1,7]
insertion_sort(array_values)
print(array_values)

# ******************************************

def quicksort2(array, low, high): 

    # THIS PART NEEDS TO CALL MY INSERTION SORT
    #if len(array) <= 16:
        #insertion_sort(array)   
    # THIS PART NEEDS TO CALL MY INSERTION SORT              

    if high > low:
        index = partition(array, low, high)    
        quicksort2(array, low, index - 1)      
        quicksort2(array, index + 1, high)     

def partition(array, low, high):                

    firstitem = array[low]
    j = low

    for i in range(low+1, high+1):            
        if array[i] < firstitem:
            j+=1
            array[j], array[i] = array[i], array[j]
    index = j
    array[low], array[index] = array[index], array[low]     
    return index                               

array = [10, 3, 4, 8, 1, 7, 0, 13]
quicksort2(array, 0, len(array)-1)             
for j in range(len(array)):                    
    print ("%d" %array[j])
EN

回答 1

Stack Overflow用户

发布于 2019-10-02 15:13:32

这个作业与"n <= 16“有误导性。当子列表包含<= 16元素时,<=应该使用插入排序,当高-低< 16时,插入排序将需要修改以接受低和高作为参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58192648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档