Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';这个快速排序代码(Python)有什么问题?_Python_Python 3.x_Algorithm_Sorting_Quicksort - Fatal编程技术网

什么';这个快速排序代码(Python)有什么问题?

什么';这个快速排序代码(Python)有什么问题?,python,python-3.x,algorithm,sorting,quicksort,Python,Python 3.x,Algorithm,Sorting,Quicksort,这是用Python 3编写的。代码如下: def partition(arr, l, h): pivot = arr[l] i = l+1 j = h while i <= j: print('i is ', i) print('j is ', j) while arr[i] < pivot: i += 1 while arr[j] > pivot: j -= 1 arr[i], arr[j] = arr[

这是用Python 3编写的。代码如下:

def partition(arr, l, h):
pivot = arr[l]
i = l+1
j = h
while i <= j:
    print('i is ', i)
    print('j is ', j)
    while arr[i] < pivot:
        i += 1
    while arr[j] > pivot:
        j -= 1
    arr[i], arr[j] = arr[j], arr[i]

# Placing the pivot at its sorted position
arr[j], arr[l] = pivot, arr[j]
return j


def quicksort(arr, l, h):
    if l >= h:
        return arr
    p = partition(arr, l, h)
    print('p is ', p)
    quicksort(arr, l, p-1)
    quicksort(arr, p+1, h)


test = [4, 2, 7, 1]
sorted_test = quicksort(test, 0, len(test)-1)
print(sorted_test)
def分区(arr、l、h): 枢轴=arr[l] i=l+1 j=h 当我转向时: j-=1 arr[i],arr[j]=arr[j],arr[i] #将轴放置在其排序位置 arr[j],arr[l]=枢轴,arr[j] 返回j def快速排序(arr、l、h): 如果l>=h: 返回arr p=分区(arr,l,h) 打印('p is',p) 快速排序(arr、l、p-1) 快速排序(arr,p+1,h) 测试=[4,2,7,1] 排序测试=快速排序(测试,0,len(测试)-1) 打印(U测试) 这是输出-

根据错误,arr[i]超出范围,但变量“i”如何达到该值? 我知道还有其他方法可以实现这一点,但我在这里做错了什么?

下面是代码

def partition(arr, low, high):
    i = (low-1)         # index of smaller element
    pivot = arr[high]     # pivot
  
    for j in range(low, high):
  
        # If current element is smaller than or
        # equal to pivot
        if arr[j] <= pivot:
  
            # increment index of smaller element
            i = i+1
            arr[i], arr[j] = arr[j], arr[i]
  
    arr[i+1], arr[high] = arr[high], arr[i+1]
    return (i+1)
  
# The main function that implements QuickSort
# arr[] --> Array to be sorted,
# low  --> Starting index,
# high  --> Ending index
  
# Function to do Quick sort
  
  
def quickSort(arr, low, high):
    if len(arr) == 1:
        return arr
    if low < high:
  
        # pi is partitioning index, arr[p] is now
        # at right place
        pi = partition(arr, low, high)
  
        # Separately sort elements before
        # partition and after partition
        quickSort(arr, low, pi-1)
        quickSort(arr, pi+1, high)
  
  
# Driver code to test above
arr = [10, 7, 8, 9, 1, 5]
n = len(arr)
quickSort(arr, 0, n-1)
test = [4, 2, 7, 1]
quicksort(test, 0, len(test)-1)

print("Sorted array is:")
for i in range(len(test)):
    print("%d" % test[i])
def分区(arr、低、高): i=(低-1)#较小元素的指数 枢轴=arr[高]#枢轴 对于范围内的j(低、高): #如果当前元素小于或 #等于枢轴 如果要排序的arr[j]数组, #低-->起始索引, #高-->结束索引 #用于快速排序的函数 def快速排序(arr、低、高): 如果len(arr)==1: 返回arr 如果低<高: #pi是分区索引,arr[p]现在是 #在正确的地方 pi=分区(arr、低、高) #在之前分别对元素进行排序 #分区和分区后 快速排序(arr、低、pi-1) 快速排序(arr、pi+1、高) #上面要测试的驱动程序代码 arr=[10,7,8,9,1,5] n=长度(arr) 快速排序(arr,0,n-1) 测试=[4,2,7,1] 快速排序(测试,0,len(测试)-1) 打印(“排序数组为:”) 对于范围内的i(len(测试)): 打印(“%d”%test[i])
看起来您正在增加
i
,直到它从列表末尾消失,并试图访问
arr[i]
@khelwood是的,我知道了。但我不明白这是怎么发生的。变量“i”不应达到该值。好的。那么,当你有
while-arr[i]
时,什么会阻止
i
达到那个值呢?@khelwood
当我