链表排序(C语言)选择排序

来源:互联网 发布:java findtask的功能 编辑:程序博客网 时间:2024/06/07 00:04
#include <stdio.h>#include <stdlib.h>#include <time.h> //用到了time函数#define arraySize 10typedef int elemType;typedef struct List{    elemType elem;    struct List *next;}Node;//产生随机数组void createRandomArray(int array[]){    int i,number;    srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样    for (i=0; i<arraySize; i++)    {        array[i] = rand() % 101; //产生0-100的随机数    }}//创建单链表struct List *createList(int num,int arrayList[]){    Node *head,*p1,*p2;    if((head=(Node*)malloc(sizeof(Node)))==NULL)    {        printf("create error\r\n");        exit(0);    }    head->elem=0;    head->next=NULL;    p1=head;    int i;    for(i=0;i<num;i++)    {        if((p2=(Node*)malloc(sizeof(Node)))==NULL)        {            printf("create error\r\n");            exit(0);        }        p2->elem=arrayList[i];        p2->next=NULL;        p1->next=p2;        p1=p2;    }    return head;}//遍历单链表void displayList(Node *head){    printf("遍历链表:");    Node *p1;    if(head==NULL)    {        printf("空链表\r\n");        //exit(0);    }    else    {        for(p1=head->next;p1!=NULL;p1=p1->next)        {            printf("%d\t",p1->elem);        }        printf("\r\n");    }}//判断链表是否为空bool isEmptyList(Node* head){    return head==NULL;//||head->next==NULL;}//链表排序  从小到大排 选择排序void sortList(Node* head){    printf("------进行排序------\r\n");    Node *p1,*p2,*p3,*temp;    if((temp=(Node*)malloc(sizeof(Node)))==NULL)    {        printf("sort create error");    }    p1=head;    //int i=0,j=0;//调试    for(p2=p1->next;p2->next!=NULL;p2=p2->next)    {for(p3=p2->next;p2!=NULL;p3=p3->next)        {            if(p2->elem>p3->elem)            {                temp->elem=p3->elem;                p3->elem=p2->elem;                p2->elem=temp->elem;            }//i++;//            printf("i:%d\t",i);if(p3->next==NULL)break;        }//j++;//        printf("j:%d\t",j);}}int main(){    Node *head;    elemType temp;    int arrayList[arraySize];    createRandomArray(arrayList);    head=createList(arraySize,arrayList);    printf("排序前\r\n");    displayList(head);    sortList(head);    printf("排序后\r\n");    displayList(head);    return 0;}

0 0