单链表实现简单选择排序

这篇具有很好参考价值的文章主要介绍了单链表实现简单选择排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算法思想:顺序遍历单链表,每当访问一个结点时,查看此结点往后的结点是否有更小的值,如果有更小值的结点,则交换两个结点元素的值(无需改变指针的指向)。每遍历一个结点就执行上诉操作,直到遍历到最后一个结点。

核心代码:

//以L指向的结点为起点,获取L之后最小元素的指针
linklist  getmin(linklist L){
	linknode *min;
	min=L;
	while(L->next){
		if(min->data>L->next->data){
			min=L->next;
		}
		L=L->next;
	}
	return min;
}

//简单选择排序,不改变指针的指向,通过交换元素的值实现。
void  choosesort(linklist head){
	linknode *p,*q;
	p=head->next;
	int temp;
	for(;p->next!=NULL;p=p->next){
		q=getmin(p);//获取p之后最小元素的指针
		if(q!=p){//如果有比p更小的元素,则交换两个结点的值
		    temp=p->data;
		    p->data=q->data;
		    q->data=temp;
		}
	}	
}

完整代码:

#include<stdio.h>
typedef  struct linknode{
	int data;
	struct linknode *next;
}linknode,*linklist;

linklist  initlist(linklist head){
	head=(linknode*)malloc(sizeof(linknode));
	if(head==NULL)
	return -1;
	head->next=NULL;
	return head;
}
 //尾插法创建单链表
void  rearinsert(linklist  head){
	linknode *rear,*s;
	int x;
	rear=head;//初始化头指针和尾指针
	scanf("%d",&x);
	while(x!=999){//输入要创建结点的值,当输入999时,退出while循环,创建单链表结束
		s=(linknode*)malloc(sizeof(linknode));//创建新结点
		s->data=x;
		rear->next=s;
		rear=s;//使rear指针始终指向最后一个结点
		scanf("%d",&x);
	}
	rear->next=NULL;
}

void  printlist(linklist  head){
	linknode *p=head;
	int j=0;
	while(p->next!=NULL){
	  p=p->next;
	  printf("%d  ",p->data);
	}
}

//以L指向的结点为起点,获取L之后最小元素的指针
linklist  getmin(linklist L){
	linknode *min;
	min=L;
	while(L->next){
		if(min->data>L->next->data){
			min=L->next;
		}
		L=L->next;
	}
	return min;
}

//简单选择排序,不改变指针的指向,通过交换元素的值实现。
void  choosesort(linklist head){
	linknode *p,*q;
	p=head->next;
	int temp;
	for(;p->next!=NULL;p=p->next){
		q=getmin(p);//获取p之后最小元素的指针
		if(q!=p){//如果有比p更小的元素,则交换两个结点的值
		    temp=p->data;
		    p->data=q->data;
		    q->data=temp;
		}
	}	
}
int  main(){
	linklist head;
	initlist(&head);
	rearinsert(&head);
	choosesort(&head);
	printlist(&head);
	
}

程序运行结果:

单链表实现简单选择排序

 文章来源地址https://www.toymoban.com/news/detail-506636.html

到了这里,关于单链表实现简单选择排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【排序算法】 归并排序详解!深入理解!思想+源码实现!

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 算法—排序篇 🌄 莫道桑榆晚,为霞尚满天! ​ 什么是归并?通过归并排序就能让数据有序?分治法是怎么在归并排序上应用的?本文将对归并排序进行细致入微的讲解,庖丁解牛般让你彻底明白归并排序! 归并排序(MERGE-SORT)是建

    2024年02月06日
    浏览(46)
  • 算法笔记【6】-简单选择排序算法

    在排序算法中,简单选择排序是一种基本且直观的排序方法。尽管它的性能较冒泡排序稍好,但仍然属于较慢的排序算法。本文将详细介绍简单选择排序算法的原理、步骤,并讨论其优缺点。 简单选择排序是一种寻找最小值的有效策略,通过不断选择剩余元素中的最小值,并

    2024年02月07日
    浏览(30)
  • 【数据结构】八大排序之简单选择排序算法

    🦄 个人主页 :修修修也 🎏 所属专栏 :数据结构 ⚙️ 操作环境 : Visual Studio 2022 目录 一.简单选择排序简介及思路 二.简单选择排序的代码实现 三.简单选择排序的优化 四.简单选择排序的时间复杂度分析 结语 简单选择排序算法(Simple Selection Sort) 是一种简单直观的 选择排序算

    2024年02月01日
    浏览(78)
  • C语言经典算法之简单选择排序算法

    目录 前言 建议: 简介: 一、代码实现 二、时空复杂度: 时间复杂度: 空间复杂度: 三、算法的特性: 四、总结 1.学习算法最重要的是理解算法的每一步,而不是记住算法。            2.建议读者学习算法的时候,自己手动一步一步地运行算法。 简单选择排序是一种

    2024年01月19日
    浏览(43)
  • 【算法】--- 几分钟了解直接选择排序(排序中最简单的排序)+快排(解决一切的优质算法)(中)

    👧个人主页:@小沈熬夜秃头中୧⍤⃝❅ 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:算法 🔑本章内容:选择排序中的 直接选择排序 和交换排序中的 快速排序 送给各位💌:你被黑暗敲打恰恰说明你是光明本身 记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~ 提示:

    2024年02月08日
    浏览(45)
  • 数据结构(C语言实现)——常见排序算法的基本思想及实现(快速排序的三种方法和优化及非递归实现快速排序)

    生活中几乎处处都会用到排序,比如:网购时的店铺顺序,学生成绩的排名等,今天我们就来学习数据结构中常见的几种排序算法。 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列

    2023年04月24日
    浏览(66)
  • 【排序算法略解】(十种排序的稳定性,时间复杂度以及实现思想)(含代码)(完工于2023.8.3)

    注:以下排序默认为升序排序。 稳定性:指的是排序的过程中是否会改变多个相同的值的相对次序,如果会改变则是不稳定的。 冒泡排序,选择排序,插入排序是最简单的排序方法。 排序方法:扫描的过程中,比较相邻两个数的大小关系,如果存在逆序就交换这两个数,这

    2024年02月13日
    浏览(53)
  • 简单选择排序——C语言实现

    选择排序思想:若按照递增顺序对顺序表进行排列,在n个元素的顺序表中,从第i(i=1)个元素开始遍历到第n-1个元素,在遍历过程中都将第i个元素依次与第i+1到第n个元素进行比较,确定最小的元素,如果最小的元素不是第i个元素则将其与最小的元素进行交换。 代码如下:

    2024年02月11日
    浏览(36)
  • 【第41天】实现一个简单选择排序

    本文已收录于专栏 🌸《Java入门一百例》🌸    本专栏开启,目的在于帮助大家更好的掌握学习 Java ,特别是一些 Java学习者 难以在网上找到系统地算法学习资料帮助自身入门算法, 同时对于专栏内的内容有任何疑问都可在文章末尾添加我的微信给你进行一对一的讲解。

    2024年02月02日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包