PixelSorting自称功能解释请求



该功能准确地做什么?我知道它在三个不同的列表中通过亮度对像素进行分类(较小,枢轴,更大)。但是我不太了解如何,自称的方面确实令人困惑。我对Python和编程的经验不太经验。

def quick_sort(pixels):
#Quicksort function that sorts pixels based on combined RGB values (R + B + G)
if pixels == []:
    return pixels
else:
    pivot = pixels[0]
    lesser = quick_sort([x for x in pixels[1:] if (x[0] + x[1] + x[2]) < (pivot[0] + pivot[1] + pivot[2])])
    greater = quick_sort([x for x in pixels[1:] if (x[0] + x[1] + x[2]) >= (pivot[0] + pivot[1] + pivot[2])])
    return lesser + [pivot] + greater

原始代码:版权(c)2014 lycaon(lycaon.me)

它是仅对3D矢量数组的著名快速码算法的简单实现。参考算法是:https://en.wikipedia.org/wiki/quicksort

如果要对[5 2 8 4 1 7 9]进行排序,则选择一个"枢轴",然后分为两组:比枢轴更小,更大。然后,您递归地调用排序算法。

对于上一个样本,将第一个值选择为"枢轴"(标有恒星)将把数组拆分为:

[5* 2 8 4 1 7 9] = [2 4 1] + 5* + [8 7 9]. 

然后,您需要在[2 4 1]和[8 7 9]上递归应用算法,将对结果数组进行排序。递归电话将给出:

[2* 4 1] = [1] + 2* + [4]
[8* 7 9] = [7] + 8* + [9]

so:

[5 2 8 4 1 7 9] = [1 2 4 5 7 8 9]

该算法的伪代码为:

def mergesort(array): 
    pivot = array[0]
    lessThan = [x for x in array[1:] if x < pivot]
    greaterThan = [x for x in array[1:] if x <= pivot]
    return mergesort(lessThan) + [pivot] + mergesort(greaterThan)

在这里,参考实现有很小的变化:我们不比较数组的元素(它应该按照词汇顺序比较像素)。它比较了像素的所有组件的总和。这就是代码这样做的原因:

pixel[0] + pixel[1] + pixel[2] <= pivot[0] + pivot[1]+pivot[2]

最新更新