在尝试理解这段代码时,我有些失落,在第一次迭代之后,又多次调用了sort函数,并且传递给“ sort”的值也发生了变化:
<CKEditor
editor={ ClassicEditor }
data={this.state.body ? this.state.body : "<p>Body text...</p>"}
onInit={ editor => {
// You can store the "editor" and use when it is needed.
console.log( 'Editor is ready to use!', editor );
} }
onChange={ ( event, editor ) => {
const data = editor.getData();
console.log( { event, editor, data,}, "DATA" );
} }
// config={upload=this.uploadImage()}
/>
我不明白为什么,修改这些索引的含义是什么,以及它如何影响排序。 我尝试调试这段代码,在我看来,这些索引更改将区域限制在数组的右侧或左侧,在第一次迭代后,大多数较大和较小的值应为。 有人可以澄清一下,澄清这两行代码的目的吗?
sort(a, lo, lt - 1, c);
sort(a, gt + 1, hi, c);
答案 0 :(得分:0)
首先,我不认为此代码是3向快速排序,我认为它只是常规的快速排序,尽管如果有更多经验的人可以检查代码并进行验证,那会很好。但对于这两行,希望以下内容会有所帮助:
所以您选择了一个枢轴元素。叫做x
然后创建两个分区。因此,列表现在包含小于x的所有内容(未必排序)跟随x大于所有x的事物(未必排序)。
所以您肯定知道x在正确的位置。现在,您需要对x两侧的零件进行排序。这就是这段代码的来源:
sort(a, lo, lt - 1, c);
sort(a, gt + 1, hi, c);
大致翻译为:
sort(the_list,from_start,to_one_before_x,with_this_comparitor);
sort(the_list,from_one_after_x,to_end,with_this_comparitor);
显然,随着算法的循环,您可以将from_start替换为from_start_of_partition,并将from_end替换为from_end_of_parition等。