排序算法之快速排序

来源:互联网 发布:lcp linux 编辑:程序博客网 时间:2024/06/05 07:00
//快速排序入口public void QuickSort(int[] lists) {MyQuickSort(lists, 0, lists.length-1);}/*递归调用该函数。原理:每次从数组从选一个标兵(本实现为简单起见直接选取给定范围内的第一个元素为标兵),  让后在给定范围内进行双向遍历,目的是以标兵为分界线,将所有小于标兵值的数字排一边,将所有大于标兵的数字  放到另一边。标兵移动到中间。这样一次调用就能确定标兵的位置。然后以标兵为界再次进行边界切割,递归定位标  兵。直到不能再切割。*/private void MyQuickSort(int[] lists,int begin,int end){if(end>begin){int flag=findFlag(lists, begin, end);MyQuickSort(lists,begin,flag-1);MyQuickSort(lists,flag+1,end);}}//通过begin和end范围内的比较,确定标兵值(即lists[begin]值的正确位置)private int findFlag(int[] lists,int begin,int end){int middleValue=lists[begin];int low=begin+1,high=end;while(low<=high){while(low<=high&&lists[low]<=middleValue){low++;}while(low<=high&&lists[high]>=middleValue){high--;}if(low<high){int temp=lists[low];lists[low]=lists[high];lists[high]=temp;  }}while(high>begin&&lists[high]>middleValue)high--;if(middleValue>lists[high]){lists[begin]=lists[high];lists[high]=middleValue;return high;}else{return begin;}}