Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Java 我如何告诉快速排序算法它应该终止?_Java_Sorting_Recursion_Quicksort - Fatal编程技术网

Java 我如何告诉快速排序算法它应该终止?

Java 我如何告诉快速排序算法它应该终止?,java,sorting,recursion,quicksort,Java,Sorting,Recursion,Quicksort,好的,我刚开始在学校学习排序算法。我想我非常了解快速排序的概念,因为我可以在一张纸上执行它。然而,有了一张纸,我知道什么时候停止,也就是数组被排序的时候。但是如果我一直检查数组,看它是否已排序,这就违背了快速排序的目的,快速排序(我认为)的目的不是检查它是否已使用递归多次排序。当数组中只剩下1个元素时,我是否必须继续递归它,当它按定义排序时,还是有其他方法终止它 当数组中只剩下1个元素时,我是否必须继续递归它,当它按定义排序时,还是有其他方法终止它 是的,这正是快速排序应该终止的方式。您需要进行

好的,我刚开始在学校学习排序算法。我想我非常了解快速排序的概念,因为我可以在一张纸上执行它。然而,有了一张纸,我知道什么时候停止,也就是数组被排序的时候。但是如果我一直检查数组,看它是否已排序,这就违背了快速排序的目的,快速排序(我认为)的目的不是检查它是否已使用递归多次排序。当数组中只剩下1个元素时,我是否必须继续递归它,当它按定义排序时,还是有其他方法终止它

当数组中只剩下1个元素时,我是否必须继续递归它,当它按定义排序时,还是有其他方法终止它


是的,这正是快速排序应该终止的方式。

您需要进行您提到的检查并不意味着它效率低下。这与
选择排序
气泡排序
没有区别,它们还必须检查各种条件并交换元素。其思想是,
快速排序
不需要进行那么多的检查,因此速度更快


为什么不输入足够的打印语句来监控您正在做什么,并将其与您在纸上得出的结果进行比较。

对于轴两侧的指针,我应该比较一下,然后如果他们都在右边,就把他们两个都移动,还是我只移动一个指针,或者这真的不重要?@DengJohnny我不知道你的意思。你应该用一些代码发布一个新问题,使其更具体。@DengJohnny只需编辑你的问题并提供更多信息。您甚至可以更改标题。@N0ob-您没有提到使用了什么分区方案。在您的另一个问题中,您似乎正在尝试实现Hoare分区方案,在这种情况下,pivot和/或elements==pivot可以在分区步骤之后的任何位置结束。“指针”(索引)指向要分区的子数组的第一个和最后一个元素,在分区步骤之后,局部变量将“指向”元素的拆分=pivot。在递归调用的参数表示单个元素之前,无法保证任何元素都处于排序位置。@N0ob-因此继续,调用递减的局部变量“split”,然后在分区步骤后,进行两次递归调用,快速排序(…,第一次,split)和快速排序(…,split+1,最后)。最后,first==split,and(split+1)==last,这两种情况都表示单个元素。这取决于检查的内容。类似于
is_sorted()。因此,是的,您不需要检查它是否已排序。事实上,您无法检查它是否在递归中排序,因为它只有在所有递归完成后才排序。