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

    /*
     * A[p...r] 被划分为两部分,A[p...q] 和 A[q+1...r],
     * A[p...q] 的每个元素都小于等于 A[q+1...r] 中的元素。
     * 对子数组递归调用划分方法,整个数组就有序了。
     * */
    void quick_sort(int A[], int p, int r)
    {
        int q;
        if (p<r)
            q = partition(A, p, r);
        quick_sort(A, p, q);
        quick_sort(A, q+1, r);
    }
    void exchange(int *a, int *b)
    {
        int t = *a; *a = *b; *b = t;
    }
    
    int partition(int A[], int p, int r)
    {
        int x = A[p];
        int i = p-1;
        int j = r+1;
        while (1) {
            do j--; while (A[j]<=x);
            do i++; while (A[i]>=x);
            if (i<j) 
                exchange(A+i, A+j);
            else
                return j;
        }
        return p;
    }
    
    /* 
     * 随机返回一个[l, h]之间的数。
     * */
    int random(int l, int h)
    {
        return l + rand()%(h-l+1);
    }
    
    int randomized_partition(int A[], int p, int r)
    {
        int i = random(p, r);
        exchange(A+p, A+i);
        return partition(A, p, r);
    }
  • 相关阅读:
    java中级或者高级面试题分享
    java常使用的框架
    spring的定时器
    ArrayList源码理解
    缓存 Memached
    ORM框架
    Web处理方式
    git使用
    Entity Framework
    .net 学习笔记2
  • 原文地址:https://www.cnblogs.com/prajna/p/2937863.html
Copyright © 2011-2022 走看看