快速排序算法 java 实现

快速排序算法 java 实现

快速排序算法Java实现
白话经典算法系列之六 快速排序 快速搞定
各种排序算法的分析及java实现

算法概念

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。

算法思想

  1. 先从数列中取出一个数作为基准数。
  2. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
  3. 再对左右区间重复第二步,直到各区间只有一个数。

算法实现

package com.lygedi.sort;

public class QuickSort {
	/*
	1.将基准数挖出形成第一个坑list[high];
    2.由前向后找比它大的数,找到后挖出此数填前一个坑list[high]中;
    3.由后向前找比它小或相等的数,找到后也挖出此数填到前一个坑list[low]中;
    4.再重复执行2,3二步,直到low==high,将基准数填入list[high]中;
    -------------------------------------------------------------------
    也可以理解成pivot、list[low]、list[high]在循环做swap,
    pivot在开始和结束时起了temp的作用
	*/
	public int partition(int[] list,int low,int high){
        //取出最右边元素做基准值
		int pivot = list[high];
		while(low<high){
            //从左向右找第一个大于pivot的item
			while(low<high && list[low]<=pivot){
				low++;
			}
			if(low<high){
				list[high] = list[low];
			}
            //从右向左找第一个小于等于pivot的item
			while(low<high && list[high]>pivot){
				high--;
			}
			if(low<high){
				list[low] = list[high];
			}
		}
		//用list[hig]和list[low]都可以,因为low==high
		list[high]=pivot;
		return high;
	}
	
	public void quickSort(int[] list,int low,int high){
		if(low<high){
			int position = partition(list,low,high);
			quickSort(list,low,position-1);
			quickSort(list,position+1,high);
		}
	}
	
	public void quickSort(int[] list){
		if(list.length>0){
			quickSort(list,0,list.length-1);
		}
	} 

	public static void main(String[] args) {
		int a[]={49,38,65,9,76,13,27,49,8,34,12,64,49,56,2,51,13,5,4,62,99,98,54,56,17,17,18,23,34,56,15,35,25,53,51};
		
		QuickSortReserve qs = new QuickSortReserve();
		qs.quickSort(a);
		
        System.out.println(a.length);
        for(int i=0;i<a.length;i++)  
            System.out.println(Integer.toString(i)+"-"+a[i]); 
	}
}
posted @ 2016-04-28 11:04  朱博@连云港  阅读(194)  评论(0编辑  收藏  举报