试以单链表为存储结构实现简单选择排序的算法

简单选择排序,就是每趟把剩余元素最小或者最大的选出来排到前面

这道题值得推敲的是,p作为一个链表结点也是可以作为for循环的初始条件和判断条件的,至于查找到最小值之后,可以把两者的数值进行一个交换,就不用删结点再插结点了。

还有一种比较有意思的思路是,你实在不会对链表进行操作,你可以把链表元素全读到一个数组中,然后对数组进行一个排序,最后再把数组中元素带回去(这种方法感兴趣读者可以自行尝试,这是万不得已不要用的,因为题目已经明确要求你用单链表,投机取巧的方法遇到严格老师会扣很多分)

void change(int* a,int* b) {
   
	int tmp = *b;
	*b = *a;
	*a = tmp;
}
void selectSort(LinkList* L) {
   
	LNode* p = (*L)->next;
	LNode* min = NULL;
	LNode* q = NULL;
	for (p;p != NULL;p = p->next) {
   
		q = p;
		min = p;
		for (q;q != NULL;q = q->next) {
   
			if (q->data < min->data) {
   
				min = q;
			}
		}
		if (min != p) {
   
			change(&(p->data), &(min->data));
		}
	}
}
int main()
{
   
	LinkList L;
	InitList2(&L);
	printf("初始链表为:");
	print2(L);
	
	printf("\n排序后链表为:");
	selectSort(&L);
	print2(L);
}

在这里插入图片描述
ps:链表初始化及打印函数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
#include<malloc.h>
//单链表定义
//链表结点
int A[10] = {
   3,9,2,1,6,7,4,0,5,8};
int B[6] = {
    4,7,8,9,11,13 };//4,7,8,9,11,13
typedef struct {
   //定义单链表结点类型
	int data;//数据域
	struct LNode *next;//指针域
}LNode, *LinkList;

//带头结点初始化-尾插法
void InitList2(LinkList* L) {
   
	(*L) = (LNode*)malloc(sizeof(LNode));
	(*L)->next = NULL;
	LNode* rear = (*L);//标记表尾
	int i = 0;
	for (i = 0;i < 10;i++) {
   
		LNode* p = (LNode*)malloc(sizeof(LNode));//创建一个新结点
		p->data = A[i];//新结点赋值
		rear->next = p;//接到L上
		rear = p;//标记表尾
	}
	rear->next = NULL;
}

void print2(LinkList L) {
   //打印带头结点的链表
	LNode* i = L->next;//用i指针遍历整个链表
	while (i != NULL) {
   
		printf("%d ", i->data);
		i = i->next;
	}
}

相关推荐

  1. 【数据结构算法简单实现

    2023-12-18 18:42:04       36 阅读
  2. 数据结构—两个有序合并排序算法

    2023-12-18 18:42:04       32 阅读
  3. 数据结构3:实现

    2023-12-18 18:42:04       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-18 18:42:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-18 18:42:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-18 18:42:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-18 18:42:04       18 阅读

热门阅读

  1. node之mysql篇经典八小时

    2023-12-18 18:42:04       43 阅读
  2. low private exponent attack

    2023-12-18 18:42:04       46 阅读
  3. 什么是NPM,NPM使用方法

    2023-12-18 18:42:04       37 阅读