有人可以向我解释这种3向快速排序的实现

时间:2019-02-06 23:49:31

标签: java sorting quicksort

在尝试理解这段代码时,我有些失落,在第一次迭代之后,又多次调用了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);

1 个答案:

答案 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等。