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的更多相关文章

  1. Insertion Sort 与 Merge Sort的性能比较(Java)

    public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextI ...

  2. 【Sort】Merge Sort归并排序

    归并排序运行时间O(N log N),但是由于需要线性附加内存,所以很少用于主存排序. 算法核心在于以下三条语句,分治递归,分别对左半边和右半边的数组进行排序,然后把左右半边的数组一一进行比较放入数组 ...

  3. [Algorithms] Sorting Algorithms (Insertion Sort, Bubble Sort, Merge Sort and Quicksort)

    Recently I systematicall review some sorting algorithms, including insertion sort, bubble sort, merg ...

  4. 归并排序(merge sort)

    M erge sort is based on the divide-and-conquer paradigm. Its worst-case running time has a lower ord ...

  5. [算法]——归并排序(Merge Sort)

    归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...

  6. SQL Tuning 基础概述06 - 表的关联方式:Nested Loops Join,Merge Sort Join & Hash Join

    nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_n ...

  7. 归并排序(Merge Sort)

    归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,再使子序 ...

  8. Summary: Merge Sort of Array && 求逆序对

    常用算法(后面有inplace版本): package ArrayMergeSort; import java.util.Arrays; public class Solution { public ...

  9. 基础排序算法之并归排序(Merge Sort)

    并归排序是学习分治法 (Merge Sort) 的好例子.而且它相对于选择,插入,冒泡排序来说,算法性能有一定提升.我首先会描述要解决的问题,并给出一个并归排序的例子.之后是算法的思路以及给出伪代码. ...

随机推荐

  1. 扒几个 3D 模型备用

    前言 在上一篇中,我展示了 OpenGL 开发的基本过程,算是向 3D 世界迈出的一小步吧.对于简单的 3D 物体,比如立方体.球体.圆环等等,我们只需要简单的计算就可以得到他们的顶点的坐标.但是仅仅 ...

  2. CentOS7安装ElasticSearch7.9.2

    1:下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar. ...

  3. SpringBoot2.1整合Mybatis-Generator以及tk.mybatis

    1:添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

  4. 【开源】.net微服务开发引擎Anno 让复杂的事简单点- 日志、链路追踪一目了然 (上)

    1.Anno简介? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可视化监控.依赖第三方框架少.详情请查看<[开源].net微服务开发引擎Anno开源啦> 本章主题:. ...

  5. Codeforces 598D (ccpc-wannafly camp day1) Igor In the Museum

    http://codeforces.com/problemset/problem/598/D 分析:BFS,同一连通区域的周长一样,但查询过多会导致TLE,所以要将连通区域的答案储存,下次查询到该连通 ...

  6. Shiro反序列化<=1.2.4 复现

    Apache Shiro是一个Java安全框架,执行身份验证.授权.密码和会话管理.    shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到reme ...

  7. java下载文件指定目录下的文件

    方法一: @RequestMapping('download')def download(HttpServletRequest request, HttpServletResponse respons ...

  8. FreeBSD 如何安装软件

    1:概括FreeBSD捆绑了丰富的系统工具集合作为基础系统的一部分.此外,FreeBSD提供了两种用于安装第三方软件的补充技术:FreeBSD Ports Collection,用于从源代码安装,以及 ...

  9. 设计模式之建造者模式(BuilderPattern)

    一.意义 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 说明:复杂对象的构建,比如一个对象有几十个成员属性,那么我们在创建这个对象,并给成员属性赋值时,就会很麻烦.采用 ...

  10. 攻防世界 reverse Guess-the-Number

    Guess-the-Number  su-ctf-quals-2014 使用jd-gui 反编译jar import java.math.BigInteger; public class guess ...