java快速排序

----------- 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);
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值