首页 > 编程语言 >数据结构与算法(排序算法)

数据结构与算法(排序算法)

时间:2024-11-29 23:57:53浏览次数:6  
标签:arr 排序 end int 插入排序 算法 数据结构 void

排序的概念

1. 排序是指将一组数据,按照特定的顺序进行排列的过程。 2. 这个过程通常是为了使数据更加有序,从而更容易进行搜索、比较或其他操作。

常见的排序算法

插入排序  

1. 把待排序的记录,按其关键码值的大小,逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 2. 通俗的来说,就是分为两堆数据,第一堆已经按顺序排列好了,第二堆是无序的,然后从无序数据堆中取出第一个数据插入到第一堆进行排序,一直重复,直到第二堆没有数据。 3. 我们玩扑克牌时,就用了插入排序的思想。

直接插入排序 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void InsertSort(int* arr, int n);
void PrintSort(int* arr, int n);

void InsertSort(int* arr, int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		int end = i;//已经排序的序列最后一位的序号
		int tmp = arr[end + 1];//待排序的序列第一位的数值
		while (end >= 0)
		{
			if (arr[end] > tmp)
			{
				arr[end + 1] = arr[end];
				end--;
			}
			else
			{
				break;
			}
		}
		end++;
		arr[end] = tmp;
	}
}

void PrintSort(int* arr, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[] = { 1,5,2,6,8,7,9,3,0,4 };
	int n = sizeof(arr) / sizeof(int);
	PrintSort(arr, n);
	InsertSort(arr, n);
	PrintSort(arr, n);
	return 0;
}

下面是对直接插入排序的总结:

1. 元素集合越接近有序,直接插入排序算法的时间效率越高。

2. 时间复杂度(默认最差的情况):O(N^2)。数组有序且为降序的情况下时间复杂度最差。

3. 空间复杂度:O(1)。

标签:arr,排序,end,int,插入排序,算法,数据结构,void
From: https://blog.csdn.net/hsy1603914691/article/details/143377057

相关文章

  • 栈和队列(数据结构)
    一.栈1.1概念与结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(LastInFirstOut)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。......
  • 【初阶数据结构和算法】初识树与二叉树的概念以及堆和完全二叉树之间的关系
    文章目录一、树的概念与结构1.树的概念2.树的相关术语3.树的表示4.树形结构实际运用举例二、二叉树的概念及特殊二叉树1.二叉树的概念2.特殊的二叉树满二叉树完全二叉树二叉树的性质(由满二叉树特点推导)三、二叉树的存储结构1.二叉树的顺序结构2.二叉树的链式结构......
  • 回溯算法part03
    文章参考来源代码随想录93.复原IP地址1.递归参数字符串(不能加const因为要在字符串上加‘.’,因此本题不用组合,直接将字符串加入到结果中),当前层递归开始遍历的地方,计数器(记录‘.’的个数)2.递归终止条件当计数器到达3时(说明分成四段了),判断最后一段是否满足区间函数,若满足加......
  • 代码随想录算法训练营第三十一天|leetcode56. 合并区间、leetcode738.单调递增的数字
    1leetcode56.合并区间题目链接:56.合并区间-力扣(LeetCode)文章链接:代码随想录视频链接:贪心算法,合并区间有细节!LeetCode:56.合并区间_哔哩哔哩_bilibili思路:其实很清楚,跟之前的方法差不多,但是自己写的时候就是有地方不会了,会不知道接下来的思路是什么1.1视频后的思路卡壳......
  • 双指针算法5
    原题1:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。原题2:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。原题3:给你一个单链表的头节点 head ,请你判断该链表是否为回文......
  • 算法渐进时间复杂度的比较
    算法渐进时间复杂度的比较与可接受范围在学习数据结构的第一章节中,我们经常会遇到一个关于算法渐进时间复杂度的比较结论:这个结论描述了不同时间复杂度函数在(N)趋于无穷大时的增长速率。本文将探讨这些时间复杂度的可接受范围,并解释哪些复杂度在实际应用中是可以接受的。......
  • 算法与数据结构练习——异或
    知识点讲解:一、异或操作定义:异或是指相同为0,不同为1,也可理解为无进位相加!!很重要!!二、关于异或运算的几个性质:1.0^N=N       (0和任何数异或都是原来的数)2.N^N=0       (任何数异或自己都是0)3.满足交换律和结合律:所以无论怎么改变顺序,最后的结果都是一样......
  • 基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
    1.算法运行效果图预览(完整程序运行后无水印) 2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)fort=1:Iterstfori=1:Numifxwoa(i,1)<0xwoa(i,1)=0.1;endifxwoa(i,2)......
  • 代码随想录算法训练营day61| 卡码网97.小明逛公园 127.骑士的攻击
    学习资料:https://www.programmercarl.com/kamacoder/0097.小明逛公园.htmlfloyd算法,三维矩阵A*算法学习记录:97.小明逛公园(没看懂,抄的)点击查看代码#三维数组Floydif__name__=="__main__":max_int=10005n,m=map(int,input().split())grid=[[[max_......
  • KMP算法
    提示:文章文章目录前言一、背景二、KMP算法2.1PMT计算方式2.2next数组计算方法2.3问题探究总结前言前期疑问:本文目标:一、背景下面的所有叙述是基于为上一个表述:下面贴出别人整理的两个知识点:在字符串“ABCDABCDABCDE”中使用KMP算法查找子串“ABCDE”,需......