zoukankan      html  css  js  c++  java
  • 排序05快速排序

    一)定义

    快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。

    (1) 分治法的基本思想
    分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。

    (2)快速排序的基本思想
    设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:
    ①分解: 
    在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。
    注意:
    划分的关键是要求出基准记录所在的位置pivotpos。划分的结果可以简单地表示为(注意pivot=R[pivotpos]):
    R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keys
    其中low≤pivotpos≤high。
    ②求解: 
    通过递归调用快速排序对左、右子区间R[low..pivotpos-1]和R[pivotpos+1..high]快速排序。
    ③组合: 
    因为当"求解"步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,"组合"步骤无须做什么,可看作是空操作。

    二)快速排序的实现(java)

    package com.fox;
    
    import java.util.Random;
    
    public class QuickSort {
    
    	public static void sort(int[] a) {
    		sort(a, 0, a.length - 1);
    	}
    
    	private static void sort(int[] a, int l, int h) {
    		if (l < h) {
    			int m = getM(a, l, h);
    			sort(a, l, m - 1);
    			sort(a, m + 1, h);
    		}
    	}
    
    	private static int getM(int[] a, int l, int h) {
    		//
    		int temp = a[l];
    		while (l < h) {
    			while (l < h && temp <= a[h])
    				h--;
    			a[l] = a[h];
    			while (l < h && temp >= a[l])
    				l++;
    			a[h] = a[l];
    		}
    		a[l] = temp;
    		//
    		return l;
    	}
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		int[] a = new int[100000];
    		Random random = new Random();
    		for (int i = 0; i < a.length; i++) {
    			a[i] = random.nextInt(100000);
    		}
    		// a = new int[] { 17, 19, 6, 22, 15, 6, 3, 42 };
    		QuickSort.sort(a);
    		for (int a_ : a)
    			System.out.println(a_);
    	}
    }
    

      

     

     

     

     

  • 相关阅读:
    各种工具类
    Mybatis各种查询
    struts配置
    spring配置和映射文件
    hibernate配置和映射文件
    mybatis配置和映射文件
    hibernate步骤和配置
    单选框,复选框和下拉框回显赋值问题
    struts2之使用oracle分页(10)
    用Spire.PDF提取PDF里的PNG图片
  • 原文地址:https://www.cnblogs.com/huangfox/p/2569575.html
Copyright © 2011-2022 走看看