----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
/*快速排序:
* 快速排序是要排序的数组中找一个轴值/支点(一般是数组的第一个元素),* 所有比轴值小的值放到它的左边,比轴值大的值放到它的右边,
* 这样轴值左边的值都是比它小,右边的值都是比它大的。
* 利用递归,重复执行得出最终排序结果
*
* 思路步聚:
* 定义一个int数组,以数组第一位做为轴值,则轴值位空出,
* 从数组未尾值开始与轴值比较,如果小于轴值则将值放到轴值空出位,左边脚标++;
* 此时右边交换值的位空出来,则从左边第二位开始与轴值比较,因为第一位已经确定是比轴值小的了,
* 如果大于轴值,就将值放到右边的空出位,如果小于就继续脚标++与轴值进行比较
*
* 1、定义三个变量,用于数组开始脚标,结束脚标,轴值
* 2、用while循环从右向左与轴值比较,如果大于轴值则右脚标--,如果小于轴值,则交换数据,左边脚标++
* 3、用while循环从左向右与轴值比较,如果大于轴值,则交换数据,右边脚标--
* 4、2 3 放到while循环里,每完成一次循环则轴值位置就会确定:也就是左脚标与右脚标相等的位置
* 5、使用递归循环以上步聚,循环条件必须是数组开始脚标要小于数组结束脚标
*
*/
public class QuickSort {
public static void main(String[] args) {
int [] arrayInt = {8,11,25,2,33,60,1};
quickSort(arrayInt,0,arrayInt.length-1);
sop(arrayInt);
}
//打印数组 便用调试过程查看
public static void sop(int [] arrayInt){
for (int i : arrayInt) {System.out.print(i+" ");}System.out.println();
}
//实现快速排序
public static void quickSort(int[] arrayInt, int low, int hight) {
int left = 0;int right = 0;int mdp = 0; 轴值/支点 middle point// 递归条件if (low < hight) {left = low;right = hight;mdp = arrayInt[left];
do {//System.out.println("-------------------------------------------------------------------");// 从右向左扫描 与轴值比较while (left < right && arrayInt[right] > mdp)right--;//sop(arrayInt);
if (left < right){arrayInt[left] = arrayInt[right];left++;
}//sop(arrayInt);// 从左向右扫描 与轴值比较while (left < right && arrayInt[left] < mdp)left++;//sop(arrayInt);if (left < right){
arrayInt[right] = arrayInt[left];right--;
}//sop(arrayInt);
} while (left < right);arrayInt[left] = mdp; //每次排完轴值位置,也可以写成arrayInt[right]=t;//sop(arrayInt);quickSort(arrayInt, low, left - 1);quickSort(arrayInt, left + 1, hight);}
}}