快速排序算法

快速排序



前言

快速排序是三种算法常用的复杂度较低的排序算法之一,同时也容易实现。


一、算法的思路

快速排序将待排序的序列分为两部分,对于升序的序列来说,前半部分统一小于后半部分。反之亦然。然后递归调用函数对两部分序列执行快速排序,直到序列有序。

  1. 首先确定待排序序列

在这里插入图片描述

  1. 确定基准元素pivot
    在这里插入图片描述
  2. 分别从右向左和从左向右遍历,分别找到小于和大于pivot的元素
    在这里插入图片描述
  3. 找到符合上一步骤的两个元素
    在这里插入图片描述
  4. 将两个元素进行交换
    在这里插入图片描述
  5. 继续完成该轮遍历
    在这里插入图片描述
  6. 完成该轮遍历及元素交换后,将pivot元素归位

在这里插入图片描述

分别对左右两侧的待排序序列[7,5]和[9,13,10]递归地执行快速排序,直到获得有序序列。

二、算法的步骤总结

  1. 首先随机选取基准元素pivot,一般选取当前序列最左端元素作为基准元素;
  2. 将基准元素归位,即基准元素左侧的元素均小于pivot,右侧的元素均大于 pivot
  3. 递归地将两个序列重复以上步骤,直到获得有序序列。

三、算法的具体实现

public class Main {
	public static void main(String[] args) {
		// 创建一维数组
		int[] array = {8, 9, 7, 5, 10, 13};
		
		// 调用快速排序
		quickSort(array, 0, array.length-1);
	}
	
	/**
	* 实现快速排序的方法
	*/
	public static void quickSort(int[] arr, int left, int right) {
		int i = left;
		int j = right;
		
		//递归退出条件
		if (i > j) return;
		
		int pivot = arr[left];  // 基准元素
		while (i < j) {
			while (i < j && pivot <= arr[j]) j--;
			while (i < j && pivot >= arr[i]) i++;
			swap(arr, i, j);  // 交换大于和小于pivot的元素
		}
		swap(arr, left, i);  // 将基准元素归位
		
		// 使用递归快速排序两部分序列
		quickSort(arr, left, i-1);
		quickSort(arr, i+1, right);
	}
	
	/**
	* 交换数组中的两个元素(位置 i 和 j)
	*/
	public static void swap(int[] arr, int i, int j) {
		int tmp = arr[j];
		arr[j] = arr[i];
		arr[i] = tmp;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值