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 ",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("选择法排序后 "); 84 int len = lenList(head); 85 choiceSort(head,len); 86 traverList(head); 87 return 0; 88 }