码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序(java)

时间:2015-09-06 14:20:57      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

import java.util.Arrays;
public class Cao45
{

/**
* @快速排序
*
* 思想:
* 通过一趟排序将要排序的数据分成独立的两部分,其中一部分比另一部分所有的数都要小,
* 然后再按照此方法对这两部分分别进行快速排序,整个排序过程可以进行递归进行,
* 以此达到整个数据变成有序序列
*
* 三个指针:
* 第一个指针为pivotVal指针(中间指针),第二个指针left和第三个指针right分别指向序列最左和最右,
* left和right同时向pivotVal逼近,同时在不停与中间值比较,将比中间值小的元素移到低端,
* 将比中间值大的移到高端,中间值定后永远不变,最后放到中间,前小后大
*/
public static void main(String[] args)
{
int[] array = {49,38,65,97,76};
quickSort(array,0,4);
System.out.println(Arrays.toString(array));

}
/**
* 递归函数
*/
public static void quickSort(int[] a,int left,int right)
{
int pivot;
if (left < right)
{
//pivot作为中间值,较小元素在左,较大元素在右
pivot = partion(a,left,right);
//对左右数组递归调用快速排序,直到顺序完全正确
quickSort(a,left,pivot-1);
quickSort(a,pivot+1,right);
}
}
/**
分割函数,一趟快排
*/
public static int partion(int[] a,int left,int right)
{
int pivotVal = a[left];
//中间值选定后永远不变,最终在中间,前小后大
while ( left < right)
{
while (left < right && a[right] >= pivotVal)
// 将比中间值小的元素放到左端,此时right位相当于空,等待比中间值大的数补位
--right;
a[left] = a[right];
while (left < right && a[left] <= pivotVal)
// 将比中间值大的元素放到右端,此时left位相当于空,等待比中间值大的数补位
++left;
a[right] = a[left];
}
//left==right,两个空位汇成一个空位,完成了一趟快速排序,此时空位由中间值补上
a[left] = pivotVal;
return left;
}
}

快速排序(java)

标签:

原文地址:http://www.cnblogs.com/guizhongyi/p/4785362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!