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 }