package sort;
/**
* QuickSort
* 快速排序算法:
* 基本思想:
* 1)选择一个枢纽元素(有很对选法,我的实现里采用去中间元素的简单方法)
* 2)使用该枢纽元素分割数组,使得比该元素小的元素在它的左边,比它大的在右边。并把枢纽元素放在合适的位置。
* 3)根据枢纽元素最后确定的位置,把数组分成三部分,左边的,右边的,枢纽元素自己,对左边的,右边的分别递归调用快速排序算法即可。
*
*/
public class QuickSort
{
private int countStep = 0;
public void sort(int[] initData)
{
int len = initData.length;
q_sort(initData, 0, len-1);
}
private final void q_sort(int[] initData, int from, int to)
{
if (to - from < 1)
{
return;
}
int pivot = (from + to) / 2;
pivot = partion(initData, from, to, pivot);
q_sort(initData, from, pivot - 1);
q_sort(initData, pivot + 1, to);
}
private int partion(int[] initData, int from, int to, int pivot)
{
int temp = initData[pivot];
initData[pivot] = initData[to];
while (from != to)
{
while (from < to && initData[from] < temp)
{
from++;
countStep ++;
}
if (from < to)
{
initData[to] = initData[from];
to--;
}
while (from < to && initData[to] > temp)
{
to--;
countStep ++;
}
if (from < to)
{
initData[from] = initData[to];
from++;
}
}
initData[from] = temp;
return from;
}
public int showStep()
{
return countStep;
}
}
快速排序算法
最新推荐文章于 2024-03-08 17:37:42 发布