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. Sqoop 数据迁移工具

    Sqoop 数据迁移工具 sqoop : SQL to hadOOP 两个功能: 1. RDB 向HDFS导入 2. HDFS向RDB导入 注:拷贝mysql-connector.jar 和 json ...

  2. DOM的理解

    https://www.cnblogs.com/djtang/p/11538420.html  dom的理解 https://blog.csdn.net/jiuqiyuliang/article/de ...

  3. Mybatis注解开发之@CacheNamespace:实现注解二级缓存的使用

    MyBatis二级缓存使用: 官方建议在service使用缓存,但是你也可以直接在mapper层缓存,这里的二级缓存就是直接在Mapper层进行缓存操作 Mybatis的二级缓存实现也十分简单,只要在 ...

  4. JS中indexOf的用法

    String.IndexOf(Char, [startIndex], [count]):返回指定字符在原字符串中的第一个匹配项的索引.可指定字符开始检索位置和指定长度的字符,若没有找到该字符,则返回 ...

  5. 【HTB系列】靶机Vault的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Kali: 10.10.14.213 靶机地址:10.10.10.109 先用nmap探 ...

  6. spring boot的 yml和properties的对比

    Spring Boot 虽然做了大量的工作来简化配置,但其配置依然是相当的复杂!支持的外部配置方式就有很多种,笔者没有去统计,也许是为了灵活使用吧.   application.yml 和 appli ...

  7. Docker的架构

    一.Docker引擎 docker引擎是一个c/s结构的应用,主要组件见下图: Server是一个常驻进程 REST API 实现了client和server间的交互协议 CLI 实现容器和镜像的管理 ...

  8. 后端程序员之路 10、gbdt(Gradient Boosting Decision Tree)

    1.GbdtModelGNode,含fea_idx.val.left.right.missing(指向left或right之一,本身不分配空间)load,从model文件加载模型,xgboost输出的 ...

  9. POJ-1087(最大流+EK算法)

    A Plug for UNIX POJ-1087 这一题也是最大流的应用,但是题目有点绕. 题目的意思就是有插座和插头,只不过这里使用设备取代了插头.只有插座和设备进行匹配了. 题目要注意的是那个适配 ...

  10. Javascript学习,DOM对象,方法的使用

    JavaScript: ECMAScript: BOM: DOM: 事件 DOM的简单学习 功能:控制html文档内容 代码:获取页面标签(元素)对象和Element document.getElem ...