}
--------------------------------------------------------------
通过一趟排序将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整个排序过程能够递归进行,以此达到整个数据变成有序序列。①以第一个keyword K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区全部keyword小于等于 K 1 ,右区全部keyword大于等于 K 1 ,最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。 ②把左区作为一个总体,用①的步骤进行处理,右区进行同样的处理。(即递归)③反复第①、②步,直到左区处理完成。
public class QuickSort {
/**
* 高速排序,对整数型数组o进行
*/
public static void quiteSort(int[] o, int low, int hight) {
if (low < hight) {
int povitePosition = adjust(o, low, hight);
quiteSort(o, low, povitePosition - 1);
quiteSort(o, povitePosition + 1, hight);
}
}
/**
* 进行调整
*/
private static int adjust(int[] o, int low, int hight) {// 选定枢轴为low所相应的值
int pivote = o[low];
while (low < hight) {
while (hight > low && compare(pivote, o[hight]) <= 0) {// 高位找到比povite大,则符合要求,继续寻找
hight--;
}
o[low] = o[hight];
while (low < hight && compare(pivote, o[low]) >= 0) { // 低位開始找到比povite小,符合要求,继续寻找
low++;
}
o[hight] = o[low];
}
o[low] = pivote;
return low;
}
/**
* @param num1 减数
* @param num2 被减数
*/
private static int compare(int num1, int num2) {
return num1 - num2;
}
public static void main(String[] args) {
int[] i = { 26, 53, 48, 15, 13, 46, 32, 18, 16 };
quiteSort(i, 0, i.length - 1);
for (int ii : i) {
System.out.print(ii + " ");
}
}
}
原文地址:http://www.cnblogs.com/mengfanrong/p/3819909.html