利用数组对链表进行排序
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node* next;
}Node,*List;
void CreateList(List L, int k)
{
Node* node;
Node* p;
//尾插法创建链表
p=L;
for(int i=0;i<k;i++)
{
node=(Node*)malloc(sizeof(Node));
scanf("%d",&node->data);
p->next=node;
p=node;
}
node->next=NULL;
}
//输出链表值
void Print(List L)
{
Node* node;
node=L->next;
while(node)
{
printf("%d ",node->data);
node=node->next;
}
printf("\n");
}
void Swap(int& a, int& b)
{
int temp;
temp=a;
a=b;
b=temp;
//测试
//printf("\n%d %d",a,b);
}
//对数组实现冒泡排序
void BubbleSort(int* arr, int k)
{
for(int i=0;i<k-1;i++)//排序次数
for(int j=0;j<k-i-1;j++)//比较次数
if(arr[j]>arr[j+1])
{
Swap(arr[j],arr[j+1]);
}
}
int main()
{
List L=(List)malloc(sizeof(Node));
L->next=NULL;
CreateList(L,5);
Print(L);
//利用数组对链表进行由小到大排序
int arr[1024];
int i=0;
//存储链表中的数据
Node* node=L->next;
Node* node2=L->next;
while(node)
{
arr[i]=node->data;
i++;
node=node->next;
}
printf("一共有%d个数据\n",i);
/*测试
int a=1,b=2;
Swap(a,b);
BubbleSort(arr,5);
for(int j=0;j<5;j++)
printf("%d\n",arr[j]);
*/
//给链表重新赋值
BubbleSort(arr,i);
for(int k=0;k<i;k++)
{
node2->data=arr[k];
node2=node2->next;
}
Print(L);
return 0;
}


浙公网安备 33010602011771号