JAVA排序算法之快速排序

快速排序,看图:
在这里插入图片描述
一轮排完之后,会将原数组分为左右两个子数组,且左边的子数组小于右边的子数组,利用递归,将子数组继续快排。

代码:

package sort;

import java.util.Arrays;

public class QuickSort {

	public static void sort(int[] a, int low, int high) {
		 if(low >= high) return;
		 int i = low, j = high;
		 int key = a[i];
		 while(i < j) {
			 while(a[j]>= key && i < j) {
				 j--;
			 }
			 if(i < j) {
				 int t = a[i];
				 a[i] = a[j];
				 a[j] = t;
			 }
			 while(a[i] < key && i < j) {
				 i++;
			 }
			 if(i < j ) {
				 int t = a[i];
				 a[i] = a[j];
				 a[j] = t;
			 }  
		 }
		 sort(a, low, i-1);
		 sort(a, i+1, high);
	}
	public static void main(String[] args) {
		int[] a = {3,9,-4,0,16,7,20,5,2};
		sort(a, 0, a.length-1);
		System.out.println(Arrays.toString(a));
	}
}

打印每次快排完的结果:

i: 0j: 8——>[2, 9, -4, 0, 16, 7, 20, 5, 3]
i: 1j: 8——>[2, 3, -4, 0, 16, 7, 20, 5, 9]
i: 1j: 3——>[2, 0, -4, 3, 16, 7, 20, 5, 9]
i: 3j: 3——>[2, 0, -4, 3, 16, 7, 20, 5, 9]
i: 0j: 2——>[-4, 0, 2, 3, 16, 7, 20, 5, 9]
i: 2j: 2——>[-4, 0, 2, 3, 16, 7, 20, 5, 9]
i: 0j: 0——>[-4, 0, 2, 3, 16, 7, 20, 5, 9]
i: 0j: 0——>[-4, 0, 2, 3, 16, 7, 20, 5, 9]
i: 4j: 8——>[-4, 0, 2, 3, 9, 7, 20, 5, 16]
i: 6j: 8——>[-4, 0, 2, 3, 9, 7, 16, 5, 20]
i: 6j: 7——>[-4, 0, 2, 3, 9, 7, 5, 16, 20]
i: 7j: 7——>[-4, 0, 2, 3, 9, 7, 5, 16, 20]
i: 4j: 6——>[-4, 0, 2, 3, 5, 7, 9, 16, 20]
i: 6j: 6——>[-4, 0, 2, 3, 5, 7, 9, 16, 20]
i: 4j: 4——>[-4, 0, 2, 3, 5, 7, 9, 16, 20]
i: 4j: 4——>[-4, 0, 2, 3, 5, 7, 9, 16, 20]

快速排序是所有同数量级的排序算法中,平均性能最好的,时间复杂度为O(n log n),最坏的情况下为O(n^2)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_L_JUN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值