java快速排序 视频_Java——快速排序

快速排序:该算法在数组中选择一个主元将数组一分为二。使得第一部分中的元素都小于或等于主元,第二部分中的元素都大于主元。然后对第一部分递归应用快速排序算法,对第二部分递归的应用快速排序算法。不过快速排序每次划分都将主元放在了恰当的位置,因为主元的选择直接影响了算法的性能。在理想的情况下,应该选择能平均划分两部分的主元。

3274f93361d3

7.png

这张图是算法的流程,和归并算法有些相似,都是进行了递归操作。每一次都对已经分好的一部分再一次进行重复操作下面看具体的方法:

public static void fast(int[] arry,int first,int last) {

if(last > first) {

int pivotIndex = fastvoid(arry,first,last);

fast(arry,first,pivotIndex-1);//前半部分

fast(arry,pivotIndex+1,last);//后半部分

}

}

public static int fastvoid(int[] arry,int first,int last) {

int privot = arry[first];

int low = first + 1;

int high = last;

while(low < high) {

/**

* 从前向后和从后向前依次和主元比较,当前面的元素比主元大,后面的元素比主元小则这两个元素互换位置

*/

while(low <= high && arry[low] <= privot) {

low++;

}

while(low <= high && arry[high] >= privot) {

high--;

}

if(high > low) {

int temp = arry[high];

arry[high] = arry[low];

arry[low] = temp;

}

}

while(high > first && arry[high] >= privot) {

high--;

}

if(privot > arry[high]) {

arry[first] = arry[high];

arry[high] = privot;

return high;

}else {

return first;

}

}

方法在数组中左侧开始查找第一个大于主元的元素,然后从数组的右侧开始查找第一个小于或等于主元的元素,最后交换这两个元素。在while循环中重复相同的查找和交换操作。直到所有的元素都查找完为止。如果主元被移动,方法返回将子数组分为两部分的主元的新下标,否则返回主元的原始下标。

快速排序和归并排序(有兴趣的可以看一下上一篇介绍归并排序的(https://www.jianshu.com/p/32b1e3b9927a))在时间方面可以说差不多是一样的,不过在空间效率方面快速排序更胜一筹,因为归并排序需要不断地新建数组,需要申请更多的资源空间,相比之下快速排序更好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值