простая сортировка
Пытаюсь сделать сортировку по ключу, но не совсем получается, поэтому прошу помощи. Условие: в 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;
}
Что нужно исправить/сделать? Или вообще не в то русло занесло? Помогите, пожалуйста :(