真正学懂计算机的人(不只是“编程匠”)都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。

作为一个初级编程人员或者说是一个程序员,算法对其是非常重要的,个人建议,如果你是正在读相关专业的大学学生,希望能够接触一些基本的算法。就算不能熟练掌握,不能够写出优美代码,也需要了解其中思想。因为有可能在以后的某个项目中,你就会用到。这是每个程序员都需要掌握的“内功”。不学,可能就会吃亏。因为,不管在什么时候,算法都是计算机科学领域最重要的基石之一。

小编想到哪里就写到哪里,也许可能在某些地方表达的不太准确,大神不喜可以评论,但小编有个请求,也不要喷小编。
插入算法总结来说就是将由小到大进行排序或者你也可以进行由大到小进行排序。

基本原理就是,将数组中的第一个数当作是有序数列,将第 i-1个数当作无序数列,将这个有i-1的元素的数组由左至右一次判断是否比有序数列中的个数大,那就进行交换位置

下面举一个例子,例如我有一个数组tuple_count = [5,1,4,7,6],我选取这个数组中的第一个数1组成有序数组,tuple_count_first = [5],剩下的组成无序数组tuple_count_second = [1,4,7,6],之后我拿1与5进行比较,5>1,那就1与5进行交换位置,插入到相应的位置。
效率分析

如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况如下。
最好情况:序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。
最坏情况:序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。
直接插入排序属于稳定的排序,最坏时间复杂度为O(n^2),最好时间复杂度为O(n),空间复杂度为O(1)。
插入排序的赋值操作是比较操作的次数加上(n-1)次。
因此,插入排序不适合对于数据量比较大的排序应用

写书写Java的插入算法:

public static void main(String[] args) {
  // TODO Auto-generated method stub
  int i,j;
  int [] tuple_count = {3,1,5,7,2,4,6,8,10,9};
  for (i = 1; i < tuple_count.length; i++) { 
        // 设置数组中的第2个元素为第一次循环要插入的数据 
        int temp = tuple_count[i]; 
        j = i - 1; 
        // 如果要插入的元素小于第j个元素,就将第j个元素向后移 
        while ((j >= 0) && temp < tuple_count[j]) { 
          tuple_count[j + 1] = tuple_count[j]; 
          j--;  
        } 
        tuple_count[j + 1] = temp; 
  }
  //将排序好的数组打印出来
  System.out.println(Arrays.toString(tuple_count));
 }

python插入算法:

Ls = [3,1,5,7,2,4,6,8,10,9]
def the_paixu(the_first_tuple):
for i in range(1,len(the_first_tuple)):
#设置数组中的第2个元素为第一次循环要插入的数据
       temp = the_first_tuple[i]
j = i-1
       #如果要插入的元素小于第j个元素,就将第j个元素向后移
       while j>=0 and temp<the_first_tuple[j]:
the_first_tuple[j+1] = the_first_tuple[j]
j = j-1
       the_first_tuple[j+1] = temp
if __name__=='__main__':
the_paixu(Ls)
print(Ls)

C语言插入算法:

#include<stdio.h>

#define n 8

void main()

{

int num[n] = { 3, 1, 5, 7, 2, 4, 6, 8 };

for (int i = 1; i < n; i++) //n为数组a元素的个数

{

int temp = num[i];

int j = i-1;

while ((j>=0) && (temp<num[j]))

{

num[j+1] = num[j];

j--;

}

num[ j+1 ] = temp;

}

for (int i = 0; i<n; i++)

{

if (i>0)

printf(",");

printf("%d", num[i]);

}

getchar();

}

插入算法分别从C,java,python三种语言进行书写的更多相关文章

  1. AES加密php,java,.net三种语言同步实现加密、解密

    话不多数上代码: java::: /* * To change this license header, choose License Headers in Project Properties. * ...

  2. Java程序员的现代RPC指南(Windows版预编译好的Protoc支持C++,Java,Python三种最常用的语言,Thrift则支持几乎主流的各种语言)

    Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...

  3. java php c# 三种语言的AES加密互转

    java php c# 三种语言的AES加密互转 最近做的项目中有一个领取优惠券的功能,项目是用php写得,不得不佩服,php自带的方法简洁而又方便好用.项目是为平台为其他公司发放优惠券,结果很囧的是 ...

  4. Java的三种代理模式

    Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...

  5. Java的三种代理模式简述

    本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...

  6. 理解java的三种代理模式

    代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing(). 1 public class ...

  7. java 的三种代理

    java的三种代理模式   1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作, ...

  8. Java的三种代理模式(Spring动态代理对象)

    Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...

  9. 【转】python 三种遍历list的方法

    [转]python 三种遍历list的方法 #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '__main__': list ...

随机推荐

  1. 如何修改3D模型的原子属性

    Chem3D是专门用于绘制化学三维模型和进行计算化学数据的ChemOffice组件,在三维模型中每个原子都有众多属性,比如原子类型.原子符号.原子编号以及原子颜色等等.掌握Chem 3D模型的原子属性 ...

  2. golang build 编译规则

    文章来源: http://blog.csdn.net/varding/article/details/12675971 讲述了golang中的条件编译,摘要如下: 第一种条件编译的方法:编译标签 编译 ...

  3. mysql的增量备份与全备的脚本

    mysql全量备份.增量备份.开启mysql的logbin日志功能.在/etc/my.cnf文件中加入以下代码: [mysqld]log-bin = "/home/mysql/logbin. ...

  4. 【BZOJ1067】[SCOI2007]降雨量 RMQ+特判

    [BZOJ1067][SCOI2007]降雨量 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年 ...

  5. ubuntu jdk 1.7 安装

      1. 打开网址http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html,下载相应的JD ...

  6. MyISAM Key Buffer 读/写/利用率(%) MylSAM平均每秒Key Buffer利用率(%) MylSAM平均每秒Key Buffer读命中率(%) MylSAM平均每秒Key Buffer写命中率(%)

    MyISAM Key Buffer 读/写/利用率(%) MylSAM平均每秒Key Buffer利用率(%)MylSAM平均每秒Key Buffer读命中率(%)MylSAM平均每秒Key Buff ...

  7. REST Representational state transfer REST Resource Naming Guide Never use CRUD function names in URIs

    怎样用通俗的语言解释什么叫 REST,以及什么是 RESTful? - 知乎  https://www.zhihu.com/question/28557115 大家都知道"古代"网 ...

  8. Java 常用语法和数据结构

    Collection 首先Java中的collection都是支持泛型和类型安全 由于Java单根继承, 所以不指定, 可以在collection里面放任何对象, collection会都当作obje ...

  9. <2014 04 29> *nix环境编程常用库总结

    -------------------------linux常用头文件如下:POSIX标准定义的头文件<dirent.h>        目录项<fcntl.h>        ...

  10. epoll浅析以及nio中的Selector

    出处: https://my.oschina.net/hosee/blog/730598 首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference) ...