选择法实现链表排序

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 /*
 4 选择法实现链表排序
 5 */
 6 typedef struct node
 7 {
 8     int data;
 9     struct node * next;
10 }NODE;
11 NODE * createList()
12 {
13     NODE *head = (NODE *)malloc(sizeof(NODE));
14     head->next = NULL;
15 
16     return head;
17 }
18 void insertNode(NODE *head,int nodeData)
19 {
20     NODE *sur = (NODE *)malloc(sizeof(NODE));
21     sur->data = nodeData;
22 
23     sur->next = head->next;
24     head->next = sur;
25 
26     return ;
27 }
28 void traverList(NODE *head)
29 {
30     head = head->next;
31     while(head)
32     {
33         printf("%d\n",head->data);
34         head = head->next;
35     }
36 }
37 int lenList(NODE *head)
38 {
39     int len = 0;
40     head = head->next;
41     while(head)
42     {
43         len++;
44         head = head->next;
45     }
46     return len;
47 }
48 void choiceSort(NODE *head,int len)
49 {
50     int i,j,temp;
51     NODE * p,*q,*t;
52     p = head->next;
53     for(i = 0;i<len-1;i++)
54     {
55         q = p->next;
56         t = p;
57         for(j = i+1;j<len;j++)
58         {
59             if(t->data > q->data)
60             {
61                 t = q; //比而不换,只记地址。
62             }
63             q = q->next;//第二个元素和头上元素比较完后往前走一走
64 
65         }
66         if(t != p)
67         {
68             
69             temp = t->data;
70             t->data = p->data;
71             p->data = temp;
72         }
73         p = p->next;//一趟完事后,头上的元素往前走一走
74     }
75     return ;
76 }
77 int main(void)
78 {
79     NODE * head = createList();
80     for(int i = 0;i<50;i++)
81         insertNode(head,rand()%100);
82     traverList(head);
83     printf("选择法排序后\n");
84     int len = lenList(head);
85     choiceSort(head,len);
86     traverList(head);
87     return 0;
88 }

 

posted on 2018-09-29 23:38  王朝马汉  阅读(533)  评论(0编辑  收藏  举报

导航