单链表的排序

来源:互联网 发布:mysql order by count 编辑:程序博客网 时间:2024/06/05 09:09

各种对单链表排序的方法:

/***对给定单链表进行排序,函数参数为指向链表第一个节点的指针*/#include <stdio.h>#include <stdlib.h>#define TRUE    1#define FALSE   0 typedef struct NODE{    struct NODE *next;    int value;}Node;/***选择排序法,每次从当前遍历中找到最小值*/int listSort1(Node **first){    Node *current,*p,*q;    int temp;    for(current = *first;current != NULL;current = current->next)    {            q = current;        for(p = current->next;p != NULL;p = p->next)        {            if(p->value < q->value)            {                q = p;                                                      //q为当前遍历中,value值最小的指针            }               }        if(q->value != current->value)        {            temp = current->value;            current->value = q->value;            q->value = temp;        }    }    return TRUE;    }/***冒泡排序法,每次得到链表中的一个最大值*/int listSort2(Node **first){    Node *current,*p,*q;    int i,j = 0,temp,nodeCount = 0,order = 1 ;    for(current = *first;current != NULL;current = current->next)        nodeCount++;for(i = 0;i < nodeCount-1;i++)    {    p = *first;        for(j = i;j < nodeCount-1;j++)        {                q = p->next;            if(p->value > q->value)            {                temp = p->value;                p->value = q->value;                q->value = temp;                order = 0;            }p = q;        }       if(order)   break;}    return TRUE;    }/***测试用,在主函数里建一个无序链表,然后对其排序*/int main(void){    Node *head,*newNode,*temp;    int newValue,count = 5;                              //测试用的整数个数    head = NULL;printf("请输入%d个整数:\n",count);    scanf("%d",&newValue);head = (Node*)malloc(sizeof(Node));    head->value = newValue;    head->next = NULL;temp = head;while(--count)    {        scanf("%d",&newValue);        newNode = (Node*)malloc(sizeof(Node));        newNode->value = newValue;        newNode->next = NULL;        temp->next = newNode;temp = newNode;newNode = NULL;      }    temp->next=NULL;    listSort2(&head);    printf("排序后的链表为:\n");while(head)    {        printf("%d ",head->value);        head = head->next;        }    printf("\n");        return TRUE;    }


原创粉丝点击