[ create a new paste ] login | about

Link: http://codepad.org/Moj23gdP    [ raw code | fork ]

C, pasted on Apr 17:
#if 0
2011-11-02 23:16:35<>abc<>131325
日時・ID・パスワードで上記の書式が各行に1行づつありまして、これが100万行あります
日付は↑の通りで各桁は2桁固定、IDとパスワードは半角英数字の小文字のみ
これらを日時順の若いのを上にソートしたいのですがどのようなソートが効率よいでしょうか?
#endif

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

#define FILENAME "pass.txt"
#define MAXRAW 1000000
#define MAXCOL 128

int genrand(int about, int width);
void genaldig(char *buf, int len);

int main(void)
{
  FILE *fo;
  int i;
  
  srand((unsigned)time(NULL));
  
  if ((fo = fopen(FILENAME, "w")) == NULL)
    exit(1);
  
  for (i = 0; i < MAXRAW; i++) {
    int year, month, day, hour, minute, second;
    char buf[MAXCOL], id[MAXCOL], pass[MAXCOL];
    
    year = genrand(2000, 12);
    month = genrand(1, 12);
    if (month == 4 || month == 6 || month == 9 || month == 11)
      day = genrand(1, 30);
    else if (month == 2)
      day = genrand(1, 28);
    else
      day = genrand(1, 31);
    hour = genrand(0, 23);
    minute = genrand(0, 59);
    second = genrand(0, 59);
    genaldig(id, genrand(5, 3));
    genaldig(pass, genrand(6, 2));
    sprintf(buf, "%04d-%02d-%02d %02d:%02d:%02d %s %s", year, month, day, hour, minute, second, id, pass);
    fprintf(fo, "%s\n", buf);
  }
  
  fclose(fo);
  
  return 0;
}

int genrand(int about, int width)
{
  return about + (int)(rand() / 32768. * width);
}

void genaldig(char *buf, int len)
{
  int i;

  for (i = 0; i < len; i++)
    *buf++ = (rand() > (int)(RAND_MAX / 3)) ? 'a' + genrand(0, 26) : '0' + genrand(0, 10);
  *buf = '\0';
}


Create a new paste based on this one


Comments: