простая сортировка

Пытаюсь сделать сортировку по ключу, но не совсем получается, поэтому прошу помощи. Условие: в 1 строке написано число записей N(1<=N<=10000).Для каждой записи указаны ключ и значение через пробел. Ключ— это целое число в диапазоне от 0 до 10^9 включительно, а значение — это строка от одного до семи символов включительно, состоящая только из маленьких букв латинского алфавита. Требуется вывести ровно те же самые ? записей, но в другом порядке. Записи должны быть упорядочены по возрастанию ключа. Если у нескольких записей ключ равный, то нужно упорядочить их в том порядке, в котором они встречаются по входном файле. Вот такой код у меня получился, но он не работает:

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

typedef struct list{
    int data;
    struct list *next;
} list;

struct list* create(int a){
    struct list *root;
    root = (struct list*)malloc(sizeof(struct list));
    root->data = a;
    root->next = NULL;
    return root;
}

struct list* addelem(list *lst, int number){
    struct list *temp, *p;
    temp = (struct list*)malloc(sizeof(list));
    p = lst->next;           
    lst->next = temp;        
    temp->data = number; 
    temp->next = p;      
    return temp;
}

void printlist(list *lst){
    struct list *p;
    p = lst;
    do{
        printf("%d ",p->data);   
        p = p->next;         
    }while(p != NULL);
}

void sort(list *root){
    list *p, *key;
    list *result = root;
    root = root->next;   
    result->next = NULL;     

    while(root->next != NULL){
        key = root;
        root = root->next;
        if(key->data < result->data){ 
            key->next = result;
            result = key;
        }else{
            p = result;
            while(p->next != NULL){     
                if(p->next->data > key->data)
                    break;
                p = p->next;
            }
            key->next = p->next;
            p->next = key;
        }
    }
    root = result;
}

int main(void) {
    int i;
    list *temp, *root;
    int a[10001];
    int N;
    scanf("%d/n", &N);
    root = create(0);
    temp = root;
    for(i = 0; i < N; i++)
        temp = addelem(temp, a[i]);
    printlist(root);
    return 0;
}

Что нужно исправить/сделать? Или вообще не в то русло занесло? Помогите, пожалуйста :(


Ответы (0 шт):