
/* 有一个带头结点的单链表L,设计一个算法使其递增有序 分析: 我们可以采用冒泡排序对其操作,使其递增有序,时间复杂度为O(n^2)。*/struct Link { int data; struct Link *next;};#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>void bubbleSort(Link *h) {//冒泡排序 int flag = 0;//排序标志,产生过变动就置为1 int count = 0;//记录链表长度 struct Link *pre=h, *p = h->next,*r; while (p) { count++; p = p->next; } p = h->next; for (int i = 0; i < count;i++) { flag = 0; while (p->next) {//开始第i+1轮冒泡 if (p->data > p->next->data) {//前者大于后者,则需要交换 r = p->next->next;//r指向下一个节点,防止断链 pre->next = p->next; p->next->next = p; pre = p->next; p->next = r; flag = 1;//有改动,flag置为1 } else { pre = p; p = p->next; } } if (!flag) break;//若某一轮链表未作变换,则认定已经排好序,退出循环 pre = h;//重新从头开始遍历 p = h->next; }}int main() { Link* createLink(int); struct Link *head; head = createLink(0); bubbleSort(head); printf("排序后链表值为:"); while (head->next) { printf("%d ", head->next->data); head = head->next; } return 0;}