2.5 单链表排序

#include <stdio.h>
#include <stdlib.h>

/*
	实现排序的方式:
	1.冒泡排序
	2.指针排序

	由于冒泡排序需要的时间过长,此处为选择排序
*/

typedef struct LNode {
	int data;
	LNode* next;
}*LinkList;

//初始化链表
bool InitLinkList(LNode*& L) {
	L = (LinkList)malloc(sizeof(LNode));
	if (L == NULL) return false;
	L->next = NULL;
	return true;
}

//尾插操作实现
LinkList CreateLinkList(LinkList L, int data[], int length) {
	LNode* p, * s;
	s = L;
	for (int i = 0; i < length; i++)
	{
		p = (LNode*)malloc(sizeof(LNode));
		if (p != NULL) {
			p->data = data[i];
			p->next = NULL;
			s->next = p;
			s = p;
		}
	}
	return L;
}

//给链表排序
void SortList(LinkList L) {
	LNode* i=L->next, *  j,*min;
	int temp=0,jdata=0;
	while (i->next!= NULL) {
		min = i;
		j = i->next;
		while (j!=NULL)
		{

			if (min->data>j->data)
			{
				min = j;
				jdata = j->data;
			}
			j = j->next;
		}
		temp = i->data;
		i->data = min->data;
		min->data = temp;
		i = i->next;
	}
}

//输出链表函数
void PrintLinkList(LinkList L) {
	LNode* p;
	p = L->next;
	while (p != NULL)
	{
		printf("%d\t", p->data);
		p = p->next;
	}
}
int main() {
	LNode* L;
	InitLinkList(L);
	int data[7] = { 2,14,6,28,12,15,18 };
	CreateLinkList(L, data, 7);
	
	//排序
	SortList(L);

	PrintLinkList(L);
}
posted @ 2022-03-18 00:06  千树line  阅读(57)  评论(0)    收藏  举报