快速排序的Java实现

桶排序时间复杂度低,但是会造成资源浪费;而冒泡排序会降低资源的浪费,但是它的时间复杂度为O(n^2);这里我们介绍一种可以降低时间复杂度的排序方法---快速排序,听名字就感觉很快,是吧?废话不多说,先上代码:

package 排序;
import java.util.Scanner;
public class 快速排序 {
//设置基准数,两个哨兵,一个从左往右找大于基准数,一个从右往左找小于基准数,每次交换这两个数,直到两个哨兵碰面,将这个数和基准数交换
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		a=new int[3];//确定数组长度
		Scanner sc = new Scanner(System.in);
		for(int i=0;i<a.length;i++) {
			a[i]=sc.nextInt();
		}
		quicksort(0,a.length-1);
		for(int i=0;i<a.length;i++) {
			System.out.println(a[i]);
		}
	}
	static int a[],n;
	public static void quicksort(int left,int right) {//传入两个参数,为两个哨兵
		//寻找结束条件
		int i,j,t,temp;
		if(left>right) {//当左边的哨兵在右边哨兵的右边则结束
			return;
		}
		temp=a[left];//基准数
		i=left;
		j=right;
		while(i!=j) {
			while(a[j]>=temp&&i<j) {
				j--;
			}
			while(a[i]<=temp&&i<j) {
				i++;
			}
			if(i<j) {
				t=a[j];
				a[j]=a[i];
				a[i]=t;
			}
		}
		a[left]=a[i];
		a[i]=temp;//基准数与现在的i,j相遇的数进行互换
		quicksort(left,i-1);
		quicksort(i+1,right);
		return;
	}
}

具体的思路步骤:

思路:它是设置一个基准数,每次会将所有数分为大于基准数或者小于基准数,然后对于大于(小于)基准数的这两堆数再进行此操作.........

具体的实现会涉及到递归,递归我理解的就是自己调用自己,相当于无限套娃。

步骤:

1.找到终止条件,即当右边的节点跑到了左边节点的左边,则表示已经将数分成了两堆,一堆是大于所选的基准数,一堆是小于所选的基准数。

2.当左右两个节点没有碰面时,则一直交换右边节点找到的小于基准数的数字,左边节点找到的大于基准数的数字。

3.当两个节点碰面时,基准数与碰面的那个数字交换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值