zoukankan      html  css  js  c++  java
  • JAVA算法系列 快速排序

    java算法系列之排序

    手写快排

    首先说一下什么是快排,比冒泡效率要高,快排的基本思路是首先找到一个基准元素,比如数组中最左边的那个位置,作为基准元素key,之后在最左边和最右边设立两个哨兵,ij
    之后,开始按住左哨兵(i),让右哨兵(j)往左走(j--),找到比key小的元素后,按住右哨兵(j),开始让左哨兵往右走(i++),直到找到比key大的元素,让i和j脚下的值互换,此时完成第一趟快排,之后开始按照这个思路进行while循环,跳出循环的条件很简单,就是当两个哨兵碰头了,就跳出循环,此时,左边一块永远比key小,右边一块始终比key大!然后来个递归,对左右这两块进行一次快排,就o了。

    
    package com.rsc.sort;
    
    /**
     * 人生中第一个快排
     * 
     * @author 
     * @落雨 http://ae6623.cn
     */
    public class QuickSort {
    
    	
    	public static void quickSort(int[] a, int l, int r) {
    		int i = l;
    		int j = r;
    
    		if (l > r) {
    			return;
    		}
    
    		int key = a[l]; // 基准位key
    		while (i != j) {
    			// 先从右边的哨兵开始找
    			while (i < j && a[j] >= key) {
    				j--; // 直到找到了 a[j]<key的一个值,就停下来,得到了下标j
    			}
    			// 然后开始从左向右寻找
    
    			while (i < j && a[i] <= key) {
    				i++;
    			}
    
    			if (i < j) {
    				key = a[j];// 将key和a[j]交换
    				a[i] = a[j];// 将a[j]和a[i]互换,此时完成a[i]的赋值
    				a[j] = key;// 成功将a[j]和a[i]互换
    			}
    		}
    
    		// 现在将key归位
    		a[l] = a[i];
    		a[i] = key;
    		System.out.println("基准位:" + key);
    
    		// 递归处理左右两块
    		quickSort(a, l, i - 1); // 从左边开始一直到i-1,也就是基准位的前一位的排序
    		quickSort(a, i + 1, r); // 从i+1开始到最右边
    
    		for (int k : a) {
    			System.out.print(k + " ");
    		}
    		System.out.println();
    
    	}
    
    	public static void main(String[] args) {
    		int[] array = { 2, 1, 5, 4, 3, 7, 6 };
    		quickSort(array, 0, array.length - 1);
    
    	}
    
    }
    
    
    

    打印结果如下:

    基准位:2
    基准位:1
    1 2 5 4 3 7 6 
    基准位:5
    基准位:3
    基准位:4
    1 2 3 4 5 7 6 
    1 2 3 4 5 7 6 
    基准位:7
    基准位:6
    1 2 3 4 5 6 7 
    1 2 3 4 5 6 7 
    1 2 3 4 5 6 7 
    1 2 3 4 5 6 7 
    
  • 相关阅读:
    史上最走心的Webpack4.0中级教程——配置之外你应该知道事
    javascript基础修炼(11)——DOM-DIFF的实现
    一统江湖的大前端(7)React.js-从开发者到工程师
    express中间件系统的基本实现
    js中如何在不影响既有事件监听的前提下新增监听器
    Zabbix的应用(6)----常见错误
    Ansible初级应用
    一个好用的小工具 thefuck
    使用python读取word文件里的表格信息
    01010_Eclipse中项目的jar包导入与导出
  • 原文地址:https://www.cnblogs.com/ae6623/p/4552031.html
Copyright © 2011-2022 走看看