JAVA排序之快速排序

一、基本思路

  选一个元素作为基准值,一般选第1个元素。小于基准值的放在基准值的左边,大于基准值的放在基准值的右边,排好后,再把基准值两边的序列分别进行上述步骤,直到排序结束。

二、算法实现

  选择数组的第一个元素作为基准元素,并把元素存在temp变量中定义right索引从后往前比较,把比temp小的放到左边。定义left索引从前往后比较,把比 temp大的放到右边。直到left和right重合,把temp值放到left与right的重合位置,结束一次循环。此时,temp左边都比temp小,右边都比temp大,但是确是无序的,此时我们再将左右两边的序列重新选择基准值,重复上面的操作,直到排序完成即可。

三、简单代码实现

package com.xcx.blog;
/**
 * @author 作者 : X-LEFT
 * @version 创建时间:2019年11月15日 下午11:14:36
 */
public class QuickSort {
	public static void main(String[] args) {
		int[] a = { 12, 20, 5, 16, 15, 8, 30 };
		System.out.println("原数组为:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
		}
		System.out.println();//换行
		//调用快速排序方法
		quickSort(a, 0, a.length - 1);
		System.out.println("快速排序后的数组为:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
		}

	}

	public static void quickSort(int a[], int left, int right) {
		if(left>=right||a==null||a.length<=1) 
			return ;
		
	
			int i = left;
			int j = right;
			int temp = a[left]; // 将第一个数作为基准数存入temp中
			while (i < j) {
				while (i < j && a[j] > temp) // 从右往左开始扫描,大于temp,j--
					j--;
				if (i < j) { // 找到小于temp的,将它填入上一个坑中,i++
					a[i] = a[j];
					i++;
				}
				while (i < j && a[i] < temp)// 从右往左开始扫描,小于temp,i++
					i++;
				if (i < j) {
					a[j] = a[i];  找到大于temp的,将它填入上一个坑中,j--
					j--;
				}

		
			a[i] = temp; // 最后将temp填入最后一个坑中
			quickSort(a, left, i - 1); // 递归,完成左边的排序
			quickSort(a, i + 1, right); // 递归,完成右一半的排序
		}
	}
}

四、运行结果

快速排序结果图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值