java , 快速排序

来源:互联网 发布:js 设置class 编辑:程序博客网 时间:2024/04/29 11:30
package compoment.test;import java.util.Arrays;/** * 快速排序 * 快速排序步骤: * 1、设置两个变量i、j,排序开始的时候:i=0,j=N-1; * 2、以第一个数组元素作为关键数据,赋值给key,即 key=A[0]; * 3、从j开始向前搜索,即由后开始向前搜索(每走一步 j--,如果发现j==i 立即停止),找到第一个小于key的值A[j],A[i]与A[j]交换; * 4、从i开始向后搜索,即由前开始向后搜索(没走一步 i ++ 如果发现j==i 立即停止),找到第一个大于key的A[i],A[i]与A[j]交换; * 重复 3,4 步 直到 j == i (此时,就将数组已key作为相对元素分为了两部分,数组左边的都比key小,数组右边的都比key大) * 将数组以j(i也可以,此时 j == i)分成两部分进行递归上面的步骤 * @author zhoufeng * */public class FastSort {static void fastSort(int[] array){fastSort(array  , 0 , array.length - 1) ;}static void fastSort(int[] array , int left , int right){if(left >= right)  return ;//取数组的第一个元素作为相对元素,将数组中大于该元素的元素全部移动到该元素的右边,小于该元素的元素全部移动到该元素的左边int point = array[left];//用下面两个变量 ,将left 与 right 的值保存下来 ,在进行下一轮递归时需要用到int tmpLeft = left ;int tmpRight = right ;while(left != right){  for ( ; left < right && array[right] > point ; right--) ; //从 后向前搜索第一个小于point的元素if(left != right)//如果搜索到了,就交换位置swap(array, left , right);for (; left < right   && array[left] < point; left++) ; //从前向后搜素第一个大于point的元素if(left != right)//如果搜索到了,就交换位置swap(array, left , right);}//此时 left == rightfastSort(array ,tmpLeft  , left );  //让point左边数组进入递归fastSort(array , left + 1 ,  tmpRight);//让point右边的数组进入递归}static void swap(int[] array , int i , int j){int tmp = array[i] ;array[i] = array[j];array[j] = tmp ;}public static void main(String[] args) {int[] array = {5,8,3,2,7,9};System.out.print("before sort:");System.out.println(Arrays.toString(array));fastSort(array) ;System.out.print(" after sort:");System.out.println(Arrays.toString(array));}}

原创粉丝点击