zoukankan      html  css  js  c++  java
  • hw笔试题-02

    #include<stdio.h>
    #include<string.h>
    
    typedef struct
    {
        char *mem;
        char  len;
    }m_table_t;
    
    int table_cmp(m_table_t *p1, m_table_t *p2)
    {
        int ret;
        if(p1->len == p2->len)
            return memcmp(p1->mem, p2->mem, p1->len);
        if(p1->len > p2->len)
            ret = memcmp(p1->mem, p2->mem, p2->len);
        else
            ret = memcmp(p1->mem, p2->mem, p1->len);
        if(0 == ret)
            return p1->len - p2->len;
        
        return ret;
    }
    
    void sort(m_table_t *a, int num)
    {
        int i,j;
        m_table_t temp;
        for(i=0;i<num;i++)
        {
            for(j=0;j<num;j++)
            {
                if( table_cmp(&a[j], &a[j+1] ) > 0)
                {
                    memcpy( &temp,  &a[j],    sizeof(m_table_t) );
                    memcpy( &a[j],  &a[j+1],  sizeof(m_table_t) );
                    memcpy( &a[j+1], &temp,   sizeof(m_table_t) );
                }
            }
        }
    }
    
    void quickSort(m_table_t *s, int l, int r)
    {
        int i, j;
        m_table_t x;
        if (l < r)
        {
            i = l; j = r; 
            memcpy(&x, &s[i], sizeof(m_table_t) );
            while (i < j)
            {
                while(i < j && (table_cmp(&s[j], &x) > 0)) j--;
                if(i < j)
                {
                    memcpy( &s[i++], &s[j], sizeof(m_table_t) );
                }
                while(i < j && (table_cmp(&x, &s[i]) > 0 )) i++;
                if(i < j)
                {
                    memcpy(&s[j--], &s[i], sizeof(m_table_t) );
                }    
            }
            memcpy(&s[i], &x, sizeof(m_table_t) );
            quickSort(s, l, i - 1);
            quickSort(s, i + 1, r);
        }
    }
    
    int str2table(m_table_t *table, char *str, int *index)
    {
        int i,w;
        *index = 0;
        for(i=0,w= -1;  i<strlen(str); i++)
        {
            if(' ' != *(str+i) )
            {
                if( (-1 == w) )
                {
                    w = i;//start
                }
            }
            else
            {
                if(-1 != w)//stop
                {
                    table[*index].mem = str+w;
                    table[*index].len = i - w;
                    (*index)++;
                    w = -1;
                }
            }
        }
        if(-1 != w)
        {
                table[*index].mem = str+w;
                table[*index].len = i - w;
                (*index)++;
                w = -1;
        }
        return 0;
    }
    
    void display(m_table_t *table, int index)
    {
        int i;
        char tmp[15] = {0};
        for(i=0; i<index; i++)
        {
            memset(tmp, 0, 15);
            memcpy(tmp, table[i].mem, table[i].len);
            printf("%s
    ", tmp);
        }
        return;
    }
    
    int main(void )
    {
        int index;
        char input[100] = {0};
        m_table_t g_table[15]= {0};
        
        gets(input);
        
        str2table(&g_table[0], input, &index);
        
        quickSort(&g_table[0], 0, index-1);//sort(&g_table[0], index-1);
    
        display(&g_table[0], index);
        return 0;
    }
  • 相关阅读:
    Qt自定义一个事件类型
    Qt正则表达式限制输入
    QtQuick随笔
    右值引用示例
    虚函数习题复习
    实现基于IOCP的回声服务器端
    以纯重叠I/O方式实现回声服务器端(windows)
    使用事件对象(重叠I/O)
    pipe mmap
    ubuntu下压缩和解压缩的命令用法
  • 原文地址:https://www.cnblogs.com/to7str/p/4392406.html
Copyright © 2011-2022 走看看