期末速成之插入排序(一)

这篇具有很好参考价值的文章主要介绍了期末速成之插入排序(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.🍉排序

(本质:进行一个筛选)
排序在生活中的应用:
期末速成之插入排序(一)

期末速成之插入排序(一)

1.1🍈插入排序

1.1.1 🍌插入排序

期末速成之插入排序(一)
单趟排序思想:排一个数,有序区间,插入一个数继续有序。
期末速成之插入排序(一)
无序变整体有序
期末速成之插入排序(一)
**
单趟排序

**
期末速成之插入排序(一)

void InsertSort(int* a, int n)
{

	//[0,end]有序,把end+1位置的值插入,保持有序
	int end;
	int tmp = a[end + 1];
	while (end >= 0)
	{
		if (tmp < a[end])
		{
			a[end + 1] = a[end];
			--end;
		}
		else
		{
			break;
		}
	}
	a[end + 1] = tmp;
}

整体:
控制end的位置进而控制排序
期末速成之插入排序(一)

void InsertSort(int* a, int n)
{
	
	//[0,end]有序,把end+1位置的值插入,保持有序
	for (int i = 0; i < n - 1; ++i)//在单趟排序的基础上加上控制end的排序
	{
	
		int end = i;
		int tmp = a[end + 1];
		while (end >= 0)
		{
			if (tmp < a[end])
			{
				a[end + 1] = a[end];
				--end;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
}

//验证
void PrintArray(int* a, int n)
{
	for (int i = 0; i < n; ++i)
	{
		printf("%d", a[i]);
	}
	printf("\n");
}

期末速成之插入排序(一)

期末速成之插入排序(一)
插入排序时间复杂度:n*n
最优(顺序有序或接近顺序有序):n

🍌1.1.2 希尔排序

无序的情况下变得更快
对直接插入排序的优化

  1. 预排序(接近顺序有序)
  2. 直接插入排序(有序)
    效果非常好
    分组插入预排
    期末速成之插入排序(一)
    gap=1时则为插入排序的单趟
void ShellSort(int* a, int n)
{
	int gap;
	int end;
	int tmp = a[end + gap];
	while (end >= 0)
	{

		if (tmp < a[end])
		{
			a[end + gap] = a[end];
			end -= gap;

		}
		else
		{
			break;
		}
	}
	a[end + gap] = tmp;
}

void ShellSort(int* a, int n)
{
	int gap=3;
	//排其他位置
	for (int j = 0; j < gap; ++j)
	{
		//先控制红色一组,控制end的位置
		for (int i = 0; i < n - gap; i += gap)
		{
			int end;
			int tmp = a[end + gap];
			while (end >= 0)
			{

				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;

				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}
}

void ShellSort(int* a, int n)
{
	int gap=3;
		for (int i = 0; i < n - gap; ++i)//简化,gap组数组交替插入排序
		{
			int end;
			int tmp = a[end + gap];
			while (end >= 0)
			{

				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;

				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}
}

升序,gap越大,大的数可以更快的到后面,越不接近有序

升序,gap越小,大的数可以更慢的到后面,越接近有序

gap与n相关,文章来源地址https://www.toymoban.com/news/detail-495692.html

void ShellSort(int* a, int n)
{
	//gap>1时是预排序
	//gap最后一次等于1,直接插入排序。最后一次保证他有序
	int gap = n;
	while (gap > 1)
	{
		gap = gap / 3 + 1;//保证最后一次一定是1。2/3=0
//log3 n

		for (int i = 0; i < n - gap; ++i)
		{
			int end;
			int tmp = a[end + gap];
			while (end >= 0)
			{

				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;

				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}

}

到了这里,关于期末速成之插入排序(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 盲目自学只会害了你!半小时速通单片机原理! #期末考试 #单片机 #速成

    整理人: 张鹏 C语言中最简单的数据类型包括 ( 整型、实型、字符 ) 51单片机时序单位从 小 到 大 是 2 拍节 —1状态 6状态—机器周期 1—4机器周期— 指令周期 七段共阴极数码管显示字符‘A’、’H’,’L’,段码应为( )。 MCS-51单片机内部有 2 个16位定时器/计数器。 单片机

    2024年01月24日
    浏览(32)
  • 算法 数据结构 递归插入排序 java插入排序 递归求解插入排序算法 如何用递归写插入排序 插入排序动图 插入排序优化 数据结构(十)

    1. 插入排序(insertion-sort):                                           是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入     算法稳定性:                  

    2024年02月09日
    浏览(43)
  • 排序算法:插入排序(直接插入排序、希尔排序)

    朋友们、伙计们,我们又见面了,本期来给大家解读一下有关排序算法的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏: C语言:从入门到精通 数据结构专栏: 数据结构 个  人  主  页 : stackY、 目录   前言: 1.排序

    2024年02月09日
    浏览(40)
  • 【插入排序】直接插入排序 与 希尔排序

    目录 1. 排序的概念: 2.插入排序基本思想 3.直接插入排序 4.希尔排序 排序: 所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中, 存在多个具有相同的的记录,若经过排序,这些记

    2024年02月13日
    浏览(28)
  • 插入排序(一)——直接插入排序与希尔排序

    目录 一.前言 二.排序的概念及其运用 1.1排序的概念 1.2 常用排序算法 三.常用排序算法的实现 3.1 插入排序 3.1.1 基本思想 3.1.2 直接插入排序 3.1.3 希尔排序(缩小增量排序) 四.全部代码 sort.c sort.h test.c 五.结语 本文我们开始进入数据结构的难点——排序,当我们初步学习排序

    2024年01月20日
    浏览(23)
  • 【排序算法】排序算法介绍及插入排序 ( 直接插入排序 && 希尔排序 )

    ​ ​📝个人主页:@Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯 长路漫漫浩浩,万事皆有期待 排序 :所谓排序,就是将一串数据,按照某种规律,或者以某种特性或,将数据按照递增或者递减,将数据从 无序转变为有序

    2023年04月21日
    浏览(32)
  • 排序第一课【插入排序】直接插入排序 与 希尔排序

    目录 1. 排序的概念: 2.插入排序基本思想 3.直接插入排序 4.希尔排序 排序: 所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中, 存在多个具有相同的的记录,若经过排序,这些记

    2024年02月14日
    浏览(57)
  • 【数据结构】排序之插入排序(直接插入排序||希尔排序)

    在生活中处处可见排序,当我们打开京东或者其它购物平台时,搜索物品,它会有一定的排序。 这次就来分享的博客与排序有关。 正文开始。 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序

    2024年01月16日
    浏览(34)
  • 【数据结构】常见排序算法——常见排序介绍、插入排序、直接插入排序、希尔排序

      在计算机科学中,排序是将一组数据按照指定的顺序排列的过程。排序算法由于执行效率的不同可以分为多种不同的算法。   通常情况下,排序算法可以分为两类,即 内部排序和外部排序 。内部排序是指数据全部加载到内存中进行排序,适用于数据量较小的情况,而

    2024年02月08日
    浏览(42)
  • 数据结与算法之排序-插入排序(直接插入/折半插入/希尔)

    文章目录 目录 前言 一、什么是插入排序 1.直接插入排序 2.折半插入排序          3.希尔排序 总结 理解三种排序,并将三种排序用C++实现,借鉴了王卓老师和没有难学的知识的图例 提示:以下是本篇文章正文内容,下面案例可供参考         插入排序是简单直观的排序方

    2024年02月04日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包