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 
    
  • 相关阅读:
    i++ 与++i
    jquery下的domcument
    jquery
    MVC MVP MVVM
    两个for还是一个for?
    华为云服务器FTP连接
    vue-i18n 使用方法
    在本地运行vue build 文件
    vue项目中使用模拟数据 MOCK
    超简单 超详细 vue项目中使用svg图标 阿里巴巴图标库
  • 原文地址:https://www.cnblogs.com/ae6623/p/4552031.html
Copyright © 2011-2022 走看看