zoukankan      html  css  js  c++  java
  • 算法学习---分治法和快速排序

    “分治者,分而治之也”分治法的主要思想就是1.若问题足够小,解决并返回 2.若问题规模不够小,减小问题规模。分治法,很容易理解,就是大而化小,小而化了的思想,把问题划分成你能解决的问题。

    // 分治法
    divide_and_conquer(P)
    {
        if(|P|<=n0){
            process(P);
        }
           else{
              divide P into smaller subinstances P1,P2,...,Pk
            for(int I=1;I<k;i++)
                yi=divide_and_conquer(P1);
            merge(y1,y2,...,yk);
        }
     } 
     
    //快速排序
    int partition(int a[],int p,int r)
    {
        int i=p;
        int j=r+1;
        int x=a[p];
        while(true)
        {
            while(a[++i]<x);             //找到>=的x 
            while(a[--i]<x);             //找到<=的x
            if(i>=j){
                break;
            } 
            swap(a,i,j);
        }
        a[p]=a[j];
        a[j]=x;
        return j;
    }
    void quickSort(int a[],int p,int r)
    {
        if(p<r){
            int q=partition(a,p,r);            //找到参考比较元素 
            quickSort(a,p,q-1);                //递归过程 
            quickSort(a,q+1,r);
        }
    }
  • 相关阅读:
    初识网络编程
    实参和形参
    函数的组成部分及函数参数
    字符编码与文件操作2
    day07
    day06
    day05
    day03
    drf规范
    JQ
  • 原文地址:https://www.cnblogs.com/lytmy7/p/7498637.html
Copyright © 2011-2022 走看看