#include <stdio.h>
#include <stdlib.h>
#include <time.h> //用到了time函数
#define arraySize 10
typedef 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;
}
链表排序(C语言)选择排序
最新推荐文章于 2024-05-15 16:20:58 发布