首页 > 编程语言 >算法

算法

时间:2023-02-20 17:44:06浏览次数:33  
标签:归并 int 复杂度 元素 start 算法 排序

选择排序和冒泡排序

选择排序

第i次排序中,找到第i个元素和最后一个元素最小的值,将它置于首位

点击查看代码
void Efferve()
{
 	int m[5] = { 12, 8, 6, 9, 10 };
	 int max = m[0];
	 for (int i = 0; i < 4; i++)
	 {
  		for (int j = i; j < 4; j++)
 		 {
 		 	 if (m[j] < m[j + 1])
  			 {
    				max = m[j + 1];
   				 	m[j + 1] = m[j];
    				m[j] = max;
 			  }
 		 }
	 } 
}

时间空间复杂度

T(n)=T(1)
O(n)=O(N2)

冒泡排序

每次两两比较记录,如果顺序相反则交换他,每次最高位或者最低位就无需比较

void BubbleSort(int *a, int size)
{
 for (int i = 0; i < size; i++)//外循环,循环每个元素
 {
  for (int j = 1; j < size - i; j++)//内循环进行元素的两两比较
  {
   if (a[j] < a[j - 1])//判断相邻元素并进行交换
   {
    int temp = a[j];
    a[j] = a[j - 1];
    a[j - 1] = temp;
   }
  }
 }
}

归并排序和快速排序

归并排序

点击查看代码
void merge_sort_recursive(int arr[], int reg[], int start, int end) {
    if (start >= end)//代表已经划分为最小组1,不需要递归
        return;
    int len = end - start, mid = (len >> 1) + start;//len是一个模块的长度 mid是划分区块的中间值
    int start1 = start, end1 = mid;
    int start2 = mid + 1, end2 = end;//区块1和区块2
    merge_sort_recursive(arr, reg, start1, end1);
    merge_sort_recursive(arr, reg, start2, end2);
    int k = start;
    while (start1 <= end1 && start2 <= end2)
        reg[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++];//这是合并主要函数 从左块第一个和右块第一个开始比较 直到有一个区块插满
    while (start1 <= end1)
	//这两部是如果排序好后剩下一部分(可能是左半边也可能是右半边),那么他一定是有序的,此时直接插入主数组即可
        reg[k++] = arr[start1++];
    while (start2 <= end2)
        reg[k++] = arr[start2++];
    for (k = start; k <= end; k++)
        arr[k] = reg[k];
}
void merge_sort(int arr[], const int len) {
    int reg[len];
    merge_sort_recursive(arr, reg, 0, len - 1);//reg是辅助数组
}
不管元素在什么情况下都要做这些步骤,所以花销的时间是不变的,所以该算法的最优时间复杂度和最差时间复杂度及平均时间复杂度都是一样的为:O( nlogn )

归并的空间复杂度就是那个临时的数组和递归时压入栈的数据占用的空间:n + logn;所以空间复杂度为:T(n)=O(n)。

归并排序算法中,归并最后到底都是相邻元素之间的比较交换,并不会发生相同元素的相对位置发生变化,故是稳定性算法。

快速排序

标签:归并,int,复杂度,元素,start,算法,排序
From: https://www.cnblogs.com/magicfat/p/17138338.html

相关文章

  • 简述7个流行的强化学习算法及代码实现!
    目前流行的强化学习算法包括Q-learning、SARSA、DDPG、A2C、PPO、DQN和TRPO。这些算法已被用于在游戏、机器人和决策制定等各种应用中,并且这些流行的算法还在不断发展......
  • 算法题:链表反转
    node节点:publicclassNode{Nodenext;Integervalue;publicNode(Integervalue){this.value=value;}publicNodeaddNode(In......
  • 基于用户的协同推荐算法
    基于用户的协同推荐算法。这个算法是最早诞生的推荐算法的一种。下面就简单介绍一下它的思想和原理。一、基本思想大家在日常使用的一些App中,相信也或多或少地遇到过基于......
  • 万字长文浅析Java集合中的排序算法
    作者:京东物流秦彪1. 引言排序是一个Java开发者,在日常开发过程中随处可见的开发内容,Java中有丰富的API可以调用使用。在Java语言中,作为集合工具类的排序方法,必定要做到通......
  • hihoCoder 1098 : 最小生成树二·Kruscal算法
    #1098:最小生成树二·Kruscal算法10000ms1000ms256MB描述随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用了——但是幸运的是,经过计算机的......
  • hihoCoder 1097 : 最小生成树一·Prim算法
    #1097:最小生成树一·Prim算法10000ms1000ms256MB描述最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了!但是,问题也接踵......
  • hihoCoder 1089 : 最短路径·二:Floyd算法
    #1089:最短路径·二:Floyd算法10000ms1000ms256MB描述万圣节的中午,小Hi和小Ho在吃过中饭之后,来到了一个新的鬼屋!鬼屋中一共有N个地点,分别编号为1..N,这N个地点之......
  • 算法之字符串
    字符串字符串--反转字符串题目:力扣题目链接(opensnewwindow)编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的......
  • 算法刷题 Day 44 | ● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
    力扣上没有纯粹的完全背包的题目,所以大家看本篇了解一下完全背包的理论后面的两道题目,都是完全背包的应用,做做感受一下完全背包视频讲解:https://www.bilibili.c......
  • 算法基础模板
    时空复杂度分析一般ACM或者笔试题的时间限制是1秒或2秒。在这种情况下,C++代码中的操作次数控制在107~108为最佳。下面给出在不同数据范围下,代码的时间复杂度和算法该如何选......