Insertion Sort and Merge Sort
Insertion Sort(插入排序)
思路:for 循环遍历数组中的每一个数
用while将每次遍历到的数于左侧的数进行对比,将小的排到左边
void InsertionSort(int*A, int n){
int key,i=0,p;
for(p=0;p<n;p++){
key=A[p];
i=p-1;
while(i>=0 && A[i]>key){
A[i+1]=A[i];
i=i-1;
}
A[i+1]=key;
}
}
中规中矩的排序方法
时间复杂度:
Best-case Running time : O(n)(数组已经被排好序的情况)
Worst-case Running Time : O(n^2)
Average Running Time : O(n^2)
从时间复杂度来看,处理少量数据还可以。当数据量较为庞大时,速度就很慢了
Merge Sort
思路:利用递归将数组分成两个相同大小的部分,直至长度为1
然后利用merge函数分别对每个部分进行排序
最后重新放在一起
void Merge(long int*A,long int left,long int center,long int right){
long int i1=left,i2=center+1,i=0,j;
long int B[100000];
long int length =sizeof(B)/sizeof(B[0]);
//比较左右两侧的大小,然后将小的的放入数组B
while (i1<=center && i2<=right)
{
if(A[i1]>A[i2]){
B[i++]=A[i2++];
}else{
B[i++]=A[i1++];
}
}
//将左侧或者右侧剩余的数以此放入数组B中
for(;i1<=center;i1++){
B[i++]=A[i1];
}
for(;i2<=right;i2++){
B[i++]=A[i2];
}
//将数组B中排好序的值赋给A
//由于每调用一次函数,B数组都会重新创建,因此B从0开始,A从left开始
for(j=0,i=left;j<=right-left;j++,i++){
A[i]=B[j];
}
}
void MergerSort(long int*A,long int left,long int right){
long int center=0;
if(left>=right){
return ;
}
center=(left+right)/2;
//这种先进行第一个递归,直至最后,没进行一次就相当于建立一层平台,当进行完后再返回上一层,执行下一个语句
MergerSort(A,left,center);
MergerSort(A,center+1,right);
Merge(A,left,center,right);
}
这个就是merge sort 的排序过程:

个人觉得递归部分的代码不是很好理解,其余部分都还可以
时间复杂度:

Insertion Sort and Merge Sort的更多相关文章
- Insertion Sort 与 Merge Sort的性能比较(Java)
public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextI ...
- 【Sort】Merge Sort归并排序
归并排序运行时间O(N log N),但是由于需要线性附加内存,所以很少用于主存排序. 算法核心在于以下三条语句,分治递归,分别对左半边和右半边的数组进行排序,然后把左右半边的数组一一进行比较放入数组 ...
- [Algorithms] Sorting Algorithms (Insertion Sort, Bubble Sort, Merge Sort and Quicksort)
Recently I systematicall review some sorting algorithms, including insertion sort, bubble sort, merg ...
- 归并排序(merge sort)
M erge sort is based on the divide-and-conquer paradigm. Its worst-case running time has a lower ord ...
- [算法]——归并排序(Merge Sort)
归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...
- SQL Tuning 基础概述06 - 表的关联方式:Nested Loops Join,Merge Sort Join & Hash Join
nested loops join(嵌套循环) 驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_n ...
- 归并排序(Merge Sort)
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,再使子序 ...
- Summary: Merge Sort of Array && 求逆序对
常用算法(后面有inplace版本): package ArrayMergeSort; import java.util.Arrays; public class Solution { public ...
- 基础排序算法之并归排序(Merge Sort)
并归排序是学习分治法 (Merge Sort) 的好例子.而且它相对于选择,插入,冒泡排序来说,算法性能有一定提升.我首先会描述要解决的问题,并给出一个并归排序的例子.之后是算法的思路以及给出伪代码. ...
随机推荐
- Maven 打包项目到私服 (deploy)
一.配置maven 在maven安装目录 /conf/setting.xml 中的servers下添加: 1 <servers> 2 <server> 3 <id> ...
- nginx+php-fpm docker镜像合二为一
一.概述 在上一篇文章介绍了nginx+php-fpm,链接如下: https://www.cnblogs.com/xiao987334176/p/12918413.html nginx和php-fp ...
- k8s v1.18.2 centos7 下环境搭建
准备 服务器:3台机器--1台主.2台工作节点,可以使用virtualbox 搭建虚拟机 主机名 centos version ip docker version flannel version 主机 ...
- 后端程序员之路 49、SSDB
正如Redis似乎是为替换memcached一样,SSSB是一个国人开发的旨在替换Redis的kv数据库. SSDB - 高性能的支持丰富数据结构的 NoSQL 数据库, 替代 Redishttp:/ ...
- AI数学基础之:概率和上帝视角
目录 简介 蒙题霍尔问题 上帝视角解决概率问题 上帝视角的好处 简介 天要下雨,娘要嫁人.虽然我们不能控制未来的走向,但是可以一定程度上预测为来事情发生的可能性.而这种可能性就叫做概率.什么是概率呢? ...
- 死磕Spring之IoC篇 - @Bean 等注解的实现原理
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- TensorFlow学习(1)
初识TensorFlow 一.术语潜知 深度学习:深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法. 深度学 ...
- python基础学习之深浅复制的概念
1.深浅复制 浅复制,python自带,深复制需要导入模块包 import copy 使用深浅复制,根据id不同写出他们的区别a = [1,2,3]b = [6,7,8]s1 = [a,b]print ...
- 2019 GDUT Rating Contest I : Problem C. Mooyo Mooyo
题面: C. Mooyo Mooyo Input file: standard input Output file: standard output Time limit: 1 second Memory ...
- 输出质数(Java)
输出质数 一.什么是质数 质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,否则称为合数(规定1既不是质数也不是合数). 二.代码实现 1.输出100以内的质数 i ...