java算法:快速排序

快速排序(Quicksort)是对冒泡排序的一种改进。

     它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

     设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。


package Sort;

import java.util.Arrays;

/**
*类描述:二分查找的精髓在于控制循环的次数,进行遍历
*@author: 张宇
*@date: 日期: 2018年8月20日 时间: 上午10:31:45
*@version 1.0
 */

public class QuickSort {
	public static void main(String []args){
        int[] arrs = {12,20,5,16,15,1,30,45,23,9};       
        quickSort(arrs,0,arrs.length-1);
        System.out.println(Arrays.toString(arrs));
     } 
	
	 //快速排序,递归算法
     public static void quickSort(int[] arr,int low,int high){
    	 int start=low;
    	 int end=high;
    	 int key=arr[low];
    	 
    	 while(start<end) {
    		 while(start<end && key<=arr[end])
    			 end--;
    		 
    		 if(key>arr[end]){		
    			 int temp=key;
    			 key=arr[end];
    			 arr[end]=temp;
    		 }
    		 
    		 while(start<end && key>=arr[start])
    			 start++;
    		 
    		 if(key<arr[start]){	 
    			 int temp=key;
    			 key=arr[start];
    			 arr[start]=temp;
    		 }
    		 //如果比较的值start大于low 
    		 if(start>low) {   		
    			 quickSort(arr, low, start-1);
    		 }
    		 //比较值end小于high
    		 if(end<high){	 
    			 quickSort(arr, end+1, high);
    		 }
    	 }    	
    }
}

猜你喜欢

转载自blog.csdn.net/zy345293721/article/details/81875023