2014-02-15 3 views
0

У меня есть очередь с номерами int, цель состоит в том, чтобы распечатать все отсортированные элементы. Во-первых, я сохраняю все числа в txt-файле, а затем я использую команду «sort» для печати всех их отсортированных. Можно сделать это чище? (Без использования файлов, а также, если это возможно без системы (...);)Сортировка чисел из очереди в C без использования файла

Это код:

... 
    FILE* fp=fopen("numbers.txt","w+"); 
    printf("\n"); 
    while (!empty(&my_queue)) //while queue is not empty 
    { 
     elem = first(&my_queue); //first() gets and deletes first element of queue 
     fprintf(fp,"%d\n", elem->number); 
    } 
    fclose(fp); 
    system("sort -n < numbers.txt"); 
    remove("numbers.txt"); 
} 

Спасибо!

+2

насчет прибегая к помощи, прежде чем спрашивать? http://stackoverflow.com/questions/1787996/c-library-function-to-do-sort – hivert

+0

Я думаю, что я не могу использовать эту функцию для этого, потому что узлы очереди не являются последовательно в памяти –

+0

Can вы берете значения очереди, копируете их в непрерывную память, сортируете и делаете в очереди? –

ответ

0

, предполагающие ваши номера поплавки перечислены отдельные строки файла:

  1. Создать массив поплавка. Если ваш не знает, сколько номеров у вас есть, использовать очень большой массив (Примечание: в приведенном ниже примере, я создал массив number_array размера 100)
  2. Читать файл
  3. Для каждой строки вашего файл, сохраните номер в массиве, который вы создали на шаге 1
  4. После прочтения всего файла сортируйте массив. Обратите внимание, что в приведенном ниже пример, я использую функцию qsort для сортировки массива (см руководства с командой людей QSort;))
  5. Написать содержание вашего отсортированного массива в файле

Пример :

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

#define LINE_SIZE 1024 

// Comparison function used for sorting 
int compare (const void * a, const void * b) 
{ 
    float fa = *(float*) a; 
    float fb = *(float*) b; 
    return (fa > fb) - (fa < fb); 
} 

// ------------------------------------------------------------- 
int main() 
{ 
    FILE *f; 
    char line[LINE_SIZE], *p; 

    int i = 0, j; 

    // YOUR NUMBER ARRAY 
    float number_array[100]; 

    // Open file 
    if (!(f = fopen("numbers.txt", "r"))) { 
     fprintf(stderr, "Unable to open file argument\n"); 
     return 1; 
    } 

    // Read lines from file 
    while (fgets(line, LINE_SIZE, f)) { 
     // You may want to remove the trailing '\n' 
     if ((p = strchr(line, '\n'))) { *p = '\0'; } 

     // Skip empty lines 
     if (line[0] == '\0') { continue; } 

     // Adding number to array 
     number_array[i] = atof(line); 
     i++; 
    } 

    // Closing file 
    fclose(f); 

    // Sorting array 
    qsort (number_array, i, sizeof(float), compare); 

    // Displaying result 8-) 
    // for (j=0; j<i; j++) 
    // { 
    //  printf("%0.2f ", number_array[j]); 
    // } 
    // printf("\n"); 

    // Writing sorted result to file 
    if (!(f = fopen("numbers.txt", "w"))) { 
     fprintf(stderr, "Unable to open file argument\n"); 
     return 1; 
    } 

    for (j=0; j<i; j++) 
    { 
     fprintf(f, "%0.2f\n", number_array[j]); 
    } 

    fclose(f); 


    return 0; 
} 
Смежные вопросы