算法设计与分析——快速排序(分治法)

算法思想:

快速排序算法思想基于分治法思想之上,存在分解、解决这两步。

  • 分解:
    数组A[p…r]被划分为子数组A[p…q-1]和 A[q+1…r], A[p…q-1]中的每个元素都小于等于A[q],A[q+1…r]中的每个元素都大于等于A[q]
    q在划分时确定
  • 解决:
    通过递归调用快速排序算法,对子数组 A[q+1…r]和A[p…q-1]进行排序

算法伪码:

QUICKSORT(A,p,r)

if p

Key subroutine: PARTITION(A, low, high)

java语言代码:

挖坑法实现 PARTITION(A, low, high) :找坑位,填坑
仅适用于可双向遍历的顺序序列,不适用于单向检索的链表

import java.util.Arrays;

public class Quick {

    /* pivot每次为数组初位置  
    public  static int partition(int a[],int low,int high) {
        int pivot=a[low];
        while (low=pivot){
                high--;
            }
            a[low]=a[high];
            while (low

前后指针法实现 PARTITION(A, low, high) :
在没找到大于pivot值前,i永远紧跟j;遇到大的两者之间机会拉开差距,中间差的肯定是连续的大于pivot的值;当再次遇到小于key的值时,交换两个下标对应的值就好了。
可适用于链表进行排序

import java.util.Arrays;

public class Quick {
public  static int partition(int a[],int low,int high) {

        int pivot=a[high];
        int i=low-1;
        int j=low;
        for(;j

你可能感兴趣的:(算法设计与分析)