思路:
1.定义一个partition(这利用最简单的:数组的第一个数)
先从右往左找,找到第一个比partition小的数,放在low这个位置(由于此时low这个地方的数已经保存在partition中了,所以不会丢失)
然后从左往右找,找到第一个比partition大的数,将其放于high此时的位置(high已经被放入了先前low的位置)
然后将partition放入相遇点 left&right
直到left与right相遇,此时已经完成了一次划分,low-left&right-high,且左边都是比partition小的数,右边都是比它大的数,那么,后续只需递归调用sort即可:
sort(low,left-1);
sort(left+1,high);
public class QuickSort { public void sort(int[] a, int low, int high){ if(low>=high){ return; } int partition = a[low]; int left = low, right = high; while(left < right){ while(left<right && a[right] >= partition){ right--; } if(left<right){ a[left] = a[right]; } while(left<right && a[left] <= partition){ left++; } if(left<right){ a[right] = a[left]; } } a[left] = partition; sort(a,low,left-1); sort(a,left+1,high); } @Test public void test(){ int[] a = {1,2,5,8,3,4,6,9,7}; sort(a,0,a.length-1); System.out.println(Arrays.toString(a)); } }