基本算法——快速排序

来源:互联网 发布:洁厕剂的知乎 编辑:程序博客网 时间:2024/06/06 02:45

每次将传入的该段的第一个节点保存,依次从尾开始找到一个比该保存的数小的,然后放到第一个节点处,然后从头往后找比保存数大的,然后放到上一个节点处。

依次进行。直到头和尾指针相遇,表示前面都是比保存的数小的,后面都是比保存的数大的。而该位置就是保存数的位置。

然后依次递归。则可以了


public void quickSort(int[]array,int left,int right) {int l = left;int r = right;if(l<r){int temp=array[l];while(l<r){while(r>l&&array[r]>temp){//直到选到小于temp的数,过滤掉大于它的数。r--;}if(array[r]<temp){//也可以写成l<rarray[l]=array[r];l++;}while(l<r&&array[l]<temp){l++;}if(array[l]>temp){//也可以写成l<rarray[r]=array[l];r--;}}//whilearray[l]=temp;quickSort(array, left, l-1);quickSort(array, l+1, right);}//if}

发现了上面 必须注释处写成l<r。不然对于数组中有重复元素,不能。  就算上面写成>=与<=也不行。特别注意