zoukankan      html  css  js  c++  java
  • 归并分类

    基本方法:
      给定一个含有n个元素(又叫关键字)的集合,如果要把它们按一定的次序分类(本节中自始至终假定按非递减分类),最直接的方法就是插入法。对A(1:n)中元素作插入分类的基本思想是:for(j=2;n;++j){将A[j]放到已分类集合A[1:j-1]的正确位置上};从中可以看出,为了插入A(j),有可能移动A(1:j-1)中的所有元素,因此可以预计该算法在时间特性上不会太好,算法具体描述如下:

    void InsertionSort(elemType a[],int n) {
    //将A(l:n)中的元素按非递减分类。n≥1
    int i;
    for(j=2;n;++j) { //A(l:j-l)已分类。
    a[0]=a[j];i = j - 1while (a[0]<a[i])) { //0≤i<j,a[0]作为哨兵元素,这是一种编程技术。
    a[i+l] = a[i];i = i - 1;
    };//while
    a[i+1] = a[0];
    };//for
    }// InsertionSort

    while循环中的语句可能执行0~j次(j=2,3,…,n),因此,这函数过程的最坏情况限界是:
    Σj=(n(n+1)/2)-l=Θ(n2)
    2≤j≤n
    如果输入数据本来就是按非递减排列的,则根本不会进入while的循环体,这就是最好情况,计算时间是Ω(n)。

    归并分类

    void MergeSort(int low,int high) {
    //A(low:high)是一个全局数组,它有high-low+l≥0个待分类元素。
    int mid;
    if(low<high)
    { mid = (low + high) / 2//求这个集合的分割点
    MergeSort(low,mid); //将一个子集合分类
    MergeSort(mid+1,high); //将另一个子集合分类
    Merge(low,mid,high);} //归并两个已分类的子集合
    }// MergeSort
  • 相关阅读:
    ie的bug及兼容性
    解决多次include后全局变量global失效的问题
    针对MYISAM表锁的解决方案(转)
    解决二进制文件冲突
    linux基本命令(1) 开关机操作
    子网掩码(NETMASK),ip地址,默认网关
    linux中常见设备对照表
    解决base64通过http传输后+变空格的问题
    mysql 查询某值是否存在于某结果集或表中
    laravel 报错 No query results for model
  • 原文地址:https://www.cnblogs.com/lihuidashen/p/3416156.html
Copyright © 2011-2022 走看看