• 《数据结构Chapter10·内部排序》


    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>

    #define MAXSIZE 20
    typedef int Keytype;
    typedef struct{
    Keytype key;
    // char *otherinfo;
    }Redtype;

    typedef struct{
    Redtype r[MAXSIZE + 1];
    int length;
    }SqList;

    //int a, b;
    #define EQ(a, b) ((a) == (b))
    #define LT(a, b) ((a) < (b))
    #define LQ(a, b) ((a) <= (b))
    /*
    char *aa, *bb;
    #define EQ(aa, bb) (!strcmp(aa, bb))
    #define LT(aa, bb) (strcmp(aa, bb) < 0)
    #define LQ(aa, bb) (strcmp(aa, bb) <= 0)
    */
    void InsertSort(SqList &L);
    void BInsertSort(SqList &L);

    int Print(SqList L)
    {
    int i;
    for(i = 1; i <= L.length; i ++)
    printf("%d ", L.r[i]);
    printf("\n");
    return 0;
    }

    int main()
    {
    SqList L1 = {{0 ,3, 4, 6, 2, 1, 5, 8, 9, 0, 7}, {10}};
    SqList L2 = L1;
    InsertSort(L1);
    Print(L1);
    BInsertSort(L2);
    Print(L2);
    system("pause");
    return 0;
    }



    //三句口诀背诵插入排序
    void InsertSort(SqList &L) { // 算法10.1 // 对顺序表L作直接插入排序。
    int i,j;
    for (i=2; i<=L.length; ++i)
    if (LT(L.r[i].key, L.r[i-1].key)) {// "<"时,需将L.r[i]插入有序子表 //TOM// i > i - 1,
    L.r[0] = L.r[i]; // 复制为哨兵
    for (j=i-1; LT(L.r[0].key, L.r[j].key); --j) //TOM//0 < j
    L.r[j+1] = L.r[j]; // 记录后移 //TOM //主角j+1
    L.r[j+1] = L.r[0]; // 插入到正确位置 //TOM//主角j+1
    }
    } // InsertSort

    void BInsertSort(SqList &L) { // 算法10.2 // 对顺序表L作折半插入排序。
    int i, j, high, low, m;
    for (i=2; i<=L.length; ++i) {
    L.r[0] = L.r[i]; // 将L.r[i]暂存到L.r[0]
    low = 1;
    high = i-1;
    while (low<=high) { // 在r[low..high]中折半查找有序插入的位置
    m = (low+high)/2; // 折半
    if (LT(L.r[0].key, L.r[m].key)) high = m-1; //TOM 0 < m // 插入点在低半区
    else low = m+1; // 插入点在高半区
    }
    for (j=i-1; j>=high+1; --j) //TOM for (j=i-1; LT(L.r[0].key, L.r[j].key); --j) 亦可
    L.r[j+1] = L.r[j]; // 记录后移
    L.r[j + 1] = L.r[0]; //TOM  L.r[high+1] = L.r[0]; 亦可 // 插入
    }
    } // BInsertSort
  • 相关阅读:
    angular4中引入quill editor
    rocketmq client for c#
    c#扩展出MapReduce方法
    用JS触发UpdatePanel里的TextBox的change事件局部刷新失败
    水晶报表中DisplayReverseSign的设置
    (转) SQL Server Merge的用法
    关于Java8 Stream的简单实用记录
    出现 java.math.BigInteger cannot be cast to java.lang.Long解决办法
    scala与spark配置浅谈
    HBase后续随笔
  • 原文地址:https://www.cnblogs.com/tomctx/p/2358912.html
Copyright © 2020-2023  润新知