【海贼王的数据航海】排序——概念|直接插入排序|希尔排序

这篇具有很好参考价值的文章主要介绍了【海贼王的数据航海】排序——概念|直接插入排序|希尔排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1 -> 排序的概念及其运用

1.1 -> 排序的概念

1.2 -> 常见的排序算法

2 -> 插入排序

2.1 -> 基本思想

2.2 -> 直接插入排序

2.2.1 -> 代码实现

2.3 -> 希尔排序(缩小增量排序)

2.3.1 -> 代码实现


【海贼王的数据航海】排序——概念|直接插入排序|希尔排序,数据结构--排序,数据结构,数据结构,排序算法,算法,c语言,后端,visual studio

1 -> 排序的概念及其运用

1.1 -> 排序的概念

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序不变,即在原序列中,r[ i ] = r[ j ],且r[ i ] 在 r[ j ]之前,而在排序后的序列中,r[ i ] 仍在 r[ j ]之前,则称这种排序算法是稳定的;否则称为不稳定。

内部排序:数据元素全部放在内存中的排序。

外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

1.2 -> 常见的排序算法

【海贼王的数据航海】排序——概念|直接插入排序|希尔排序,数据结构--排序,数据结构,数据结构,排序算法,算法,c语言,后端,visual studio

2 -> 插入排序

2.1 -> 基本思想

直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。

实际中我们玩扑克牌时,就用到了插入排序的思想。

【海贼王的数据航海】排序——概念|直接插入排序|希尔排序,数据结构--排序,数据结构,数据结构,排序算法,算法,c语言,后端,visual studio

2.2 -> 直接插入排序

当插入第i(i >= 1)个元素时,前面的arr[0],arr[1],arr[2]……,arr[i - 1]已经排好序,此时用arr[i]的排序码与arr[i - 1],arr[i - 2]……的排序码顺序进行比较,找到插入位置即将arr[i]插入,原来位置上的元素顺序后移。

【海贼王的数据航海】排序——概念|直接插入排序|希尔排序,数据结构--排序,数据结构,数据结构,排序算法,算法,c语言,后端,visual studio

直接插入排序的特性总结:

  1. 元素集合越接近有序,直接插入排序算法的时间效率越高;
  2. 时间复杂度:;
  3. 空间复杂度:,他是一种稳定的排序算法;
  4. 稳定性:稳定;

2.2.1 -> 代码实现

#define  _CRT_SECURE_NO_WARNINGS 1

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

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

	printf("\n");
}

// 插入排序
void InsertSort(int* a, int n)
{
	for (int i = 0; i < n - 1; ++i)
	{
		int end = i;
		int tmp = a[i + 1];
		while (end >= 0)
		{
			if (a[end] > tmp)
			{
				a[end + 1] = a[end];
				--end;
			}
			else
			{
				break;
			}

			a[end + 1] = tmp;
		}
	}
}

void TestInsertSort()
{
	int a[] = { 9, 2, 6, 1, 7, 3 ,0, 5, 8, 4 };
	PrintArray(a, sizeof(a) / sizeof(int));
	InsertSort(a, sizeof(a) / sizeof(int));
	PrintArray(a, sizeof(a) / sizeof(int));
}

int main()
{

	TestInsertSort();

	return 0;
}

【海贼王的数据航海】排序——概念|直接插入排序|希尔排序,数据结构--排序,数据结构,数据结构,排序算法,算法,c语言,后端,visual studio

2.3 -> 希尔排序(缩小增量排序)

希尔排序法又称缩小增量法。希尔排序的基本思想就是:先选定一个整数,把待排序文件中所有记录分成各子序列,并对每一组内的记录进行排序,重复上述分组和排序的工作。当gap = 1时,完成排序。

【海贼王的数据航海】排序——概念|直接插入排序|希尔排序,数据结构--排序,数据结构,数据结构,排序算法,算法,c语言,后端,visual studio

希尔排序的特性总结:

  1. 希尔排序是对直接插入排序的优化。
  2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序了,这样就会很快。整体而言,可以达到优化的效果。
  3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算。
  4. 稳定性:不稳定。

2.3.1 -> 代码实现

#define  _CRT_SECURE_NO_WARNINGS 1

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

// 插入排序
void InsertSort(int* a, int n)
{
	for (int i = 0; i < n - 1; ++i)
	{
		int end = i;
		int tmp = a[i + 1];
		while (end >= 0)
		{
			if (a[end] > tmp)
			{
				a[end + 1] = a[end];
				--end;
			}
			else
			{
				break;
			}

			a[end + 1] = tmp;
		}
	}
}

// 希尔排序
void ShellSort(int* a, int n)
{
	int gap = n;
	for (int i = 0; i < n - gap; i++)
	{
		int end = i;
		int tmp = a[end + gap];
		while (end >= 0)
		{
			if (a[end] > tmp)
			{
				a[end + gap] = a[end];
				end -= gap;
			}
			else
			{
				break;
			}
		}

		a[end + gap] = tmp;
	}
}

void TestShellSort()
{
	int a[] = { 9, 2, 6, 1, 7, 3 ,0, 5, 8, 4 };
	PrintArray(a, sizeof(a) / sizeof(int));
	InsertSort(a, sizeof(a) / sizeof(int));
	PrintArray(a, sizeof(a) / sizeof(int));

	ShellSort(a, sizeof(a) / sizeof(int));
	PrintArray(a, sizeof(a) / sizeof(int));
}

int main()
{

	TestShellSort();

	return 0;
}

【海贼王的数据航海】排序——概念|直接插入排序|希尔排序,数据结构--排序,数据结构,数据结构,排序算法,算法,c语言,后端,visual studio


感谢大佬们的支持!!!

互三啦!!!文章来源地址https://www.toymoban.com/news/detail-843148.html

到了这里,关于【海贼王的数据航海】排序——概念|直接插入排序|希尔排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【海贼王的数据航海】链表—双向链表

    目录 往期 1 - 带头+双向+循环链表(双链表) 1.1 - 接口声明 1.2 - 接口实现 1.2.1 - 双向链表初始化 1.2.2 - 动态申请一个结点 1.2.3 - 双向链表销毁 1.2.4 - 双向链表打印 1.2.5 - 双向链表判空 1.2.6 - 双向链表尾插 1.2.7 - 双向链表尾删 1.2.8 - 双向链表头插 1.2.9 - 双向链表头删

    2024年03月14日
    浏览(32)
  • 【海贼王的数据航海】时间复杂度 | 空间复杂度

    目录 1 - 算法效率 1.1 - 如何衡量一个算法的好坏? 1.2 - 算法的复杂度 2 - 时间复杂度 2.1 - 时间复杂度的概念 2.2 - 大O的渐进表示法 2.3 - 常见时间复杂度计算 3 - 空间复杂度 4 - 常见复杂度对比 对于以下斐波那契数列: 用递归实现斐波那契数列,看上去代码十分简洁,但简洁一

    2024年03月14日
    浏览(33)
  • 【海贼王的数据航海:利用数据结构成为数据海洋的霸主】探究二叉树的奥秘

    目录 1 - 树的概念及结构 1.1 - 树的概念 1.2 - 树的相关概念 1.3 - 树的表示 1.4 - 树在实际中的运用(表示文件系统的目录树结构) 2 - 二叉树概念及结构 2.1 - 二叉树的概念 2.2 - 现实中的二叉树 2.3 - 特殊的二叉树 2.4 - 二叉树的性质 2.5 - 二叉树的存储结构 3 - 二叉树的顺序结构及实

    2024年03月12日
    浏览(49)
  • 大学生bootstrap框架网页作业成品 web前端大作业期末源码 航海王html+jquery+bootstrap响应式网页制作模板 学生海贼王动漫bootstrap框架网站作品

    HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐👇🏻👇🏻👇🏻 ❤ 【作者主页

    2024年02月11日
    浏览(51)
  • 【排序算法】一、排序概念和直接插入排序(C/C++)

    「前言」文章内容是排序算法之 直接插入排序 的讲解。(所有文章已经分类好,放心食用) 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 排序的概念 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小, 递增或递减 的排列起来

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

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

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

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

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

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

    2024年02月08日
    浏览(39)
  • 数据结构进阶篇 之 【插入排序】详细讲解(直接插入排序,希尔排序)

    千万不要因为一件事不会做而失去信心,你又不是只有这一件事不会,你还有很多呢 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 直接插入排序的特性总结 2.1 基本思想 2.2 实现原理 2.3 代码实现 2.4希尔排序的特性总结 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–

    2024年04月12日
    浏览(58)
  • 直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序——“数据结构与算法”

    各位CSDN的uu们你们好呀,今天小雅兰的内容是数据结构与算法啦,是排序!!!下面,让我们进入七大排序的世界吧!!! 排序:所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在

    2024年02月15日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包