插入排序详解(C语言)

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

前言
插入排序是一种简单直观的排序算法,在小规模数据排序或部分有序的情况下插入排序的表现十分良好,今天我将带大家学习插入排序的使用。let’s go ! ! !
插入排序详解(C语言),c语言学习,算法专栏,c语言,排序算法,算法

插入排序

插入排序的基本思想是将待排序的序列分为已排序和未排序两部分。初始时,将第一个元素视为已排序序列,剩下的元素视为未排序部分。然后逐个将未排序部分的元素插入到已排序序列的正确位置,直到所有元素都被插入到已排序序列中。
举个例子:
这是一个数组,我们要对其从小到大排序。
1 6 8 9 5 2 3
根据刚才的思路,我们将1认为是已排序部分,其他的为待排序部分,我们要逐个的将待排序部分的元素插入到已排序部分,首先我们把6插在1的后面,因为,6 > 1,现在6就算是以排序部分,之后的8和9也依次加到后面,现在的已排序部分为1689,我们需要把5插入其中,首先5和9对比,5 < 9,再让5和8对比,5 < 8,再让5和6对比,5 < 6,再让5和1对比,5 > 1,所以5需要插在1和6之间,剩下的2和3也是同理,插入完即可得到目标序列。
下面我们来用代码实现:

#include<stdio.h>
int main()
{
	int arr[6] = { 1,1,4,5,1,4 };//创建数组
	for (int i = 1; i < 6; i++)
	{
		int end = i;//记录当前位置
		while (end)
		{
			if (arr[end - 1] > arr[end])//交换位置
			{
				int tem = arr[end];
				arr[end] = arr[end - 1];
				arr[end-1] = tem;
				end--;
			}
			else//已经插入退出循环
			{
				break;
			}
		}
	}
	return 0;
}

优化
我们会发现在已排序部分是单调的,那么我们是不是就可以使用二分法呢?使用二分法可以大大加快我们插入的效率。当我们通过二分法找到需要插入的位置后,我们要让这个位置到记录的位置这个区间的元素整体后移一格,然后插入这个数字,例如:
1 6 8 9 5
我们通过二分查找找到5要放在1和6中间,那么我们要让6-9后移一格1 6 8 9然后将5插入空处。
代码如下:

#include<stdio.h>
int efcz(int* arr, int right)//二分查找函数
{
	int end = right + 1;//目标数下标
	int left = 0;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] >= arr[end])
		{
			right = mid - 1;
		}
		else
			left = mid + 1;
	}
	return left;
}
int main()
{
	int arr[6] = { 1,3,4,5,6,2 };//创建数组
	for (int i = 1; i < 6; i++)
	{
		int right = i-1;//右边界
		int ret = efcz(arr, right);//二分查找插入位置
		int tem = arr[i];//临时变量
		for (int j = right; j >= ret; j--)//数组从ret到rihgt整体后移一格
		{
			arr[j + 1] = arr[j];
		}
		arr[ret] = tem;//插入
	}
	return 0;
}

结尾

看到这里的小伙伴们想必都已经掌握了插入排序的使用方法,如果觉得博主讲的不错的话,能不能给博主一个免费的关注,点赞,收藏支持一下呢?博主将持续分享更多知识,关注博主不迷路哦~,我们下期再见!
(对了,今天是圣诞节,小伙伴们圣诞节快乐!)文章来源地址https://www.toymoban.com/news/detail-763556.html

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

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

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

相关文章

  • 八大排序算法(C语言版)之插入排序

    八大排序算法: 超链接: 插入排序 选择排序 交换排序 归并排序 非比较排序 排序:所谓排序,就是使一串记录, 按照其中的某个或某些的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的的记录,若经过排序,这些

    2024年02月07日
    浏览(36)
  • 用C语言进行学生成绩排序(插入排序算法)

    从今天开始我们就要开始学习排序算法啦! 排序,就是重新排列表中的元素,使表中的元素满足按有序的过程。为了查找方便,通常希望计算机中的表是按有序的。 除了我们之前了解的时间复杂度和空间复杂度来判断一个算法的好坏之外,在排序算法这里我们引

    2024年02月15日
    浏览(29)
  • Java高级语言实现插入排序算法

    【引言】 插入排序算法是一种简单且常用的排序算法。它通过依次将未排序的元素插入已排序序列中的正确位置来达到排序的目的。本文将使用Java高级语言实现插入排序算法,并讲解其核心思想和代码实现。 【算法思想】 插入排序的核心思想是通过构建有序序列,对于未排

    2024年02月11日
    浏览(36)
  • 用C语言实现插入排序算法

    1.设计思路 用插入排序对长度为n的待排序数组A进行排序的伪代码(在代码中,A中元素的数目n用A.length来表示)。 伪代码如下: 2.源代码 3.运行结果 第一行的5为要排序的元素个数,12,32,6,67,43为要排序的数,排序过程为6插到最前面,43插到67前面,即可完成从小到大的

    2024年02月14日
    浏览(32)
  • c语言编写排序算法——直接插入排序(附详细代码)

    记号说明: a[k:r] 是指序列 a[k] a[k+1] a[k+2] … a[r] 。 为了讨论简单,假设待排序的每个记录是一个整数,这个整数就是排序码。 直接插入排序 :先将第一个记录看作是一个有序的记录序列,然后从第二个记录开始,依次将未排序的记录插入到这个有序的记录序列中去,直到整

    2024年02月11日
    浏览(32)
  • 插入排序和希尔排序:用C语言打造高效的排序算法

    插入排序的思路就像是你在整理一堆扑克牌。你先拿起第一张牌,然后拿起第二张牌,把它插入到合适的位置,使得你手上的两张牌是有序的。接着,你再拿起第三张牌,也把它插入到合适的位置,使得你手上的三张牌是有序的。依此类推,直到你把所有的牌都拿到手上,这

    2024年02月16日
    浏览(31)
  • 【C语言】解析C语言实现排序的算法(冒泡排序、插入排序、选择排序、快速排序、归并排序)

    本博客主要围绕五种常见的排序算法展开讨论,包括选择排序、快速排序、归并排序、冒泡排序和插入排序。针对每种算法,我对其思想、特点、时间复杂度、稳定性以及优缺点进行了详细解释和比较。 冒泡排序算法是一种简单且常用的排序算法。它通过重复地交换相邻的元

    2024年02月13日
    浏览(32)
  • 直接插入排序--C语言(附详细代码)(附图详解)

    目录 插入排序法的介绍 什么是插入排序法? 稳定性分析 插入排序基本思想 例子分析 实现代码 运行结果 插入排序,一般也被称为 直接插入排序 。对于 少量元素的排序 ,它是一个有效的算法  。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排

    2024年02月08日
    浏览(25)
  • 快速排序、希尔排序、归并排序、堆排序、插入排序、冒泡排序、选择排序(递归、非递归)C语言详解

    1.排序的概念及其运用 1.1排序的概念 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的的记录,若经过排序,这些记录的相对次序保持不变,即在原序

    2024年02月03日
    浏览(38)
  • 【排序算法 上】带你手撕常见排序 (插入,希尔,选择,堆排序) (动图详解)

    欢迎来到 Claffic 的博客  💞💞💞 “东风随春归,发我枝上花。” 前言:  排序是日常生活中极其常见的一种算法,它的功能很简单,就是将数字按照升序/降序排列,最终形成一组有序的数字,不过形成有序数字的过程有多种实现方式,它们各有好坏,接下来,由我带你手

    2023年04月19日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包