public static void quickSort(int[] arr, int low, int high){
if (low >= high) {
return;
}
int part = partition(arr, low, high);
quickSort(arr, low, part - 1);
quickSort(arr, part + 1, high);
}
如果不加上if (low >= high) {
return;
} 就会报栈溢出的错误?
我想知道是为什么?
low >= high return意思就是已经拆分到了最小单位了,快速排序应该在low<high的条件下递归
快速排序也叫分治法,就是将很复杂的问题分成很小的问题来解决,而low和high就是分割的起点和终点下标
快速排序原理及实现_wehung的博客-CSDN博客_快速排序原理 转自博客:http://blog.csdn.net/morewindows/article/details/6684558 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想—-... https://blog.csdn.net/wehung/article/details/82704565
这是递归结束条件啊
没有这句,你的递归不就死循环了么?
不判断low >= high,你这个low会一直网上加啊,总有一天会超出数组的大小范围啊
快速排序(Quick Sort)是对冒泡排序的一种改进,基本思想是选取一个记录作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于枢轴,另一部分都大于枢轴。然后继续对这两部分继续进行排序,从而使整个序列达到有序。
if(left >= right)//表示已经完成一个组
快速排序的是利用递归思想实现的,终止条件就是if(left >= right)
快速排序课件
可以根据课件理解一下快排思路