九度OJ 1099:后缀子串排序 (排序)
- 题目描述:
- 
对于一个字符串,将其后缀子串进行排序,例如grain 
 其子串有:
 grain
 rain
 ain
 in
 n然后对各子串按字典顺序排序,即: 
 ain,grain,in,n,rain
- 输入:
- 
每个案例为一行字符串。 
- 输出:
- 
将子串排序输出 
- 样例输入:
- 
grain 
- 样例输出:
- 
ain grain in n rain 
思路:
可以将字符串分解后拷贝到一个字符串数组中,然后快速排序。
但拷贝过程实际上可以避免,考虑设置一个指针数组,分别指向字符串的不同位置,对指针数组进行排序即可。
该题对时间要求不高,暂时并未实现后一种方法。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define N 1000
 
int cmp(const void *a, const void *b)
{
    return strcmp((char *)a, (char *)b);
}
 
int main(void)
{
    int i, j, k, n;
    char s[N][N];
 
    while (scanf("%s", s[0]) != EOF)
    {
        n = strlen(s[0]);
        for(i=1; s[0][i]; i++)
        {
            k = 0;
            for(j=i; s[0][j]; j++)
                s[i][k++] = s[0][j];
            s[i][k] = '\0';
        }
        qsort(s, n, sizeof(s[0]), cmp);
        for(i=0; i<n; i++)
            printf("%s\n", s[i]);
    }
 
    return 0;
}
/**************************************************************
    Problem: 1099
    User: liangrx06
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:1824 kb
****************************************************************/
    编程算法爱好者。
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号