»Ë»Ñ Æ÷·³
°³¹ßÀÚÆ÷·³ ÀÔ´Ï´Ù.
  • ºÏ¸¶Å© ¾ÆÀÌÄÜ

C¾ð¾î Á¤·Ä ¿ø¸® Áú¹®1

  • Mocabread
  • µî·ÏÀÏ 2015-05-18 12:30
  • Á¶È¸¼ö 251
Á¤·ÄÀ» °øºÎÇÏ°í ÀÖ´Â ÇлýÀÔ´Ï´Ù. ¿ÜºÎÁ¤·ÄÀ̶ó´Â °É °øºÎÇÏ°í Àִµ¥, ÀÌ°Ô ¾î¶² ¿ø¸®·Î µ¹¾Æ°¡´ÂÁö µµ¹«Áö ÀÌÇØ°¡ °¡Áö ¾Ê½À´Ï´Ù.

ÀÌ°Ô ¾î¶² ¹æ½ÄÀ¸·Î µ¹¾Æ°¡´ÂÁö ¾Æ½Ã´ÂºÐ ÀÖÀ»±î¿ä? ºÎŹµå¸³´Ï´Ù


void sortData(char *filename) {
FILE *fp[4];
int i, flg1, flg2, count1, count2, val, val1, val2, n = 1;
char *file[] = { "file1.txt", "file2.txt",
"res1.txt", "res2.txt" };
while (1) {
/ Á¶°Ç - while ¹«ÇÑ·çÇÁ 1 ********************************************************************************************* /
  for (i = 0; i < 4; i++) { /** °¢ ÆÄÀϵéÀÇ ¿ÀÇ ÇüÅ ¼³Á¤ ** /<br />   
   if (i < 2) {<br />     fp[i] = fopen(file[i], "r"); // Àб⠸ðµå·Î ¿­°í,
    if (fp[i]) {
     if (fscanf(fp[i], "%d", &val) == EOF) // fp[i]°¡ ³¡¿¡ µµ´ÞÇÑ´Ù¸é,
      goto out; // out À¸·Î À̵¿
     else
      rewind(fp[i]); // À§Ä¡ÁöÁ¤¿¬»êÀÚ ¸Ç ¾ÕÀ¸·Î À̵¿
    }
   }
   else {
  
    fp[i] = fopen(file[i], "w");
   }
   if (!fp[i]) { // ¿­¸®Áö ¾Ê¾Ò´Ù¸é ¿¡·¯¸Þ½ÃÁö Ãâ·ÂÈÄ ÇÁ·Î±×·¥ Á¾·á
    fcloseall();
    printf("sortData-fopen(%s) failedn", file[i]);
    exit(0);
   }
  }
  i = 2;
  flg1 = flg2 = 1;
  count1 = count2 = 0;
/ Á¶°Ç - for ¹«ÇÑ·çÇÁ 1 ********************************************************************************************* /
  for (;;) { // ¹«ÇÑ·çÇÁ¸¦ ÀǹÌ
   if (flg1) {
    /*
    * file[0]°¡ ³¡¿¡ µµ´ÞÇß´Ù¸é,
    * file[1]ÀÌ ³¡¿¡ µµ´ÞÇÒ¶§±îÁö file[i]¿¡ µ¥ÀÌÅ͸¦ ½á¶ó
    */
    if (fscanf(fp[0], "%d", &val1) == EOF) {
     while (fscanf(fp[1], "%d", &val2) != EOF) {
      fprintf(fp[i], "%d ", val2);
     }
     break; // ±×¸®°í for¹® Å»Ãâ
    }
   }
   if (flg2) {
    /*
    * file[1]°¡ ³¡¿¡ µµ´ÞÇß´Ù¸é,
    * file[0]ÀÌ ³¡¿¡ µµ´ÞÇÒ¶§±îÁö file[i]¿¡ µ¥ÀÌÅ͸¦ ½á¶ó
    */
    if (fscanf(fp[1], "%d", &val2) == EOF) {
     while (fscanf(fp[0], "%d", &val1) != EOF) {
      fprintf(fp[i], "%d ", val1);
     }
     break; // ±×¸®°í for¹® Å»Ãâ
    }
   }
/ Á¶°Ç - for ¹«ÇÑ·çÇÁ 2 ********************************************************************************************* /
   /*
   * file[0]¿¡¼­ ÀÐÀº val1ÀÌ val2º¸´Ù Å©´Ù¸é,
   * val2¸¦ Ãâ·ÂÆÄÀÏ¿¡ ¾²°í, ±×·¸Áö ¾ÊÀ¸¸é val1À» ½á¶ó
   */
   if (val1 > val2)  {
    flg1 = 0;
    flg2 = 1;
    count2++;
    fprintf(fp[i], "%d ", val2);
   }
   else {
    flg1 = 1;
    flg2 = 0;
    count1++;
    fprintf(fp[i], "%d ", val1);
   }
/ Á¶°Ç - for ¹«ÇÑ·çÇÁ 3 ********************************************************************************************* /
   /*
   * nÀº Áõ°¡±âÀÌ´Ù. ¸¸ÀÏ count1ÀÌ n°ú °°À¸¸é Ãâ·ÂÆÄÀÏ¿¡ val2¸¦ ¾²°í, count2¸¦ Áõ°¡½ÃŲ´Ù.
   * ´ÙÀ½¹Ýº¹¶§, i´Â »ç¿ëÇÏ´Â Ãâ·ÂÆÄÀÏ¿¡ µû¶ó¼­ ¹Ù²ï´Ù
   */
   if (count1 == n) {
    fprintf(fp[i], "%d ", val2); // val2¸¦ Ãâ·ÂÆÄÀÏ¿¡ ¾²°í
    count2++; // count2¸¦ Áõ°¡½ÃŲ´Ù
    while (count2 < n) { // ¸¸ÀÏ count2°¡ nº¸´Ù ÀÛ´Ù¸é, Á¶°ÇÀ» °Ë»çÇÑ´Ù<br />      if (fscanf(fp[1], "%d", &val2) != EOF) // ¸¸ÀÏ file[1]ÀÌ ³¡¿¡ µµ´ÞÇÏÁö ¾Ê¾ÒÀ¸¸é,
      fprintf(fp[i], "%d ", val2); // Ãâ·ÂÆÄÀÏ¿¡ val2¸¦ ½á¶ó
     count2++; // ±×¸®°í count2¸¦ Áõ°¡½ÃŲ´Ù
    }
    flg1 = flg2 = 1; // °¢Á¾ Á¶°Çº¯¼öµé ÃʱâÈ­
    count1 = count2 = 0;
    i = (i == 2) ? 3 : 2; // iÀÇ °ªÀ» ¹Ù²Û´Ù
   }

   if (count2 == n) {
    fprintf(fp[i], "%d ", val1); // val1¸¦ Ãâ·ÂÆÄÀÏ¿¡ ¾²°í,
    count1++; // count1 À» Áõ°¡½ÃŲ´Ù.
    while (count1 < n) {  // ¸¸ÀÏ count1°¡ nº¸´Ù ÀÛ´Ù¸é, Á¶°ÇÀ» °Ë»çÇÑ´Ù<br />      if (fscanf(fp[0], "%d", &val1) != EOF) // ¸¸ÀÏ file[0]ÀÌ ³¡¿¡ µµ´ÞÇÏÁö ¾Ê¾ÒÀ¸¸é,
      fprintf(fp[i], "%d ", val1); // Ãâ·ÂÆÄÀÏ¿¡ val1¸¦ ½á¶ó
     count1++; // ±×¸®°í count1¸¦ Áõ°¡½ÃŲ´Ù
    }
    flg1 = flg2 = 1; // °¢Á¾ Á¶°Çº¯¼öµé ÃʱâÈ­
    count1 = count2 = 0;
    i = (i == 2) ? 3 : 2; // iÀÇ °ªÀ» ¹Ù²Û´Ù
   }
  }
/ Á¶°Ç - for ¹«ÇÑ·çÇÁ ³¡ ******************************************************************************************* /
  fcloseall(); // ¸ðµçÆÄÀÏÀ» ´Ý´Â´Ù
  unlink(file[0]); // file[0]À» »èÁ¦ÇÑ´Ù
  unlink(file[1]); // file[1]À» »èÁ¦ÇÑ´Ù
  
  rename(file[2], file[0]);
  
  rename(file[3], file[1]);
  n = n * 2;
}
/ Á¶°Ç - while ¹«ÇÑ·çÇÁ ³¡ ******************************************************************************************* /
out:
fcloseall(); // ¸ðµç ÆÄÀÏÀ» ´Ý´Â´Ù
unlink(filename); // filenameÀ» »èÁ¦ÇÑ´Ù

rename(file[0], filename);
unlink(file[1]); // file[1]À» »èÁ¦ÇÑ´Ù
}
/ ¿ÜºÎÁ¤·Ä ÇÔ¼ö ³¡ ******************************************************************************************* /

0
ÃßõÇϱ⠴ٸ¥ÀÇ°ß 0
|
°øÀ¯¹öÆ°

´Ù¸¥ÀÇ°ß 0 Ãßõ 0 ¾È´¨¸¶À̽ã
  • ¾Ë¸² ¿å¼³, »óó ÁÙ ¼ö ÀÖ´Â ¾ÇÇÃÀº »ï°¡ÁÖ¼¼¿ä.
©¹æ »çÁø  
¡â ÀÌÀü±Û¡ä ´ÙÀ½±Û