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

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

小编想到哪里就写到哪里,也许可能在某些地方表达的不太准确,大神不喜可以评论,但小编有个请求,也不要喷小编。

插入算法总结来说就是将由小到大进行排序或者你也可以进行由大到小进行排序。

基本原理就是,将数组中的第一个数当作是有序数列,将第 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+1] = the_first_tuple[j]

j = j-1

the_first_tuple[j+1] = temp

if __name__=='__main__':

the_paixu(Ls)

print(Ls)

C语言插入算法:

#include

#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+1] = num[j];

j--;

}

num[ j+1 ] = temp;

}

for (int i = 0; i

{

if (i>0)

printf(",");

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

}

getchar();

}

python写界面c这算法_插入算法分别从C,java,python三种语言进行书写相关推荐

  1. 用Python写界面

    1.用Python写界面–上位机开发 tkinter:https://blog.csdn.net/shuduaa/article/details/80423650 tkinter有点不好用 PyQt5 ...

  2. python编程剪刀石头布思路_剪刀石头布小习题三种语言python2、php、go代码

    剪刀石头布小习题三种语言python2.php.go代码 # coding:utf-8 """ python核心编程6-14习题的解题思路 设计一个"石头,剪子 ...

  3. 常用十大算法_回溯算法

    回溯算法 回溯算法已经在前面详细的分析过了,详见猛击此处. 简单的讲: 回溯算法是一种局部暴力的枚举算法 循环中,若条件满足,进入递归,开启下一次流程,若条件不满足,就不进行递归,转而进行上一次流程. ...

  4. cb32a_c++_STL_算法_查找算法_(5)adjacent_find

    cb32a_c++_STL_算法_查找算法_(5)adjacent_find adjacent_find(b,e),b,begin(),e,end() adjacent_find(b,e,p),p-p ...

  5. 用TypeScript写界面就是个笑话, 狗屎级别的体验.根本体验不到脚本语言带来的好处.

    吐槽一下. 用TypeScript写界面就是个笑话, 狗屎级别的体验.根本体验不到脚本语言带来的好处. 一堆的注意事项, 推断也推断不到, 属性也不识别. 各种报错, 所花的精力远远超过使用js时排除 ...

  6. Spark - OnYARN 模式搭建,并使用 Scala、Java、Python 三种语言测试

    一.SparkOnYarn搭建 安装前需要提前安装好 hadoop 环境,关于 HDFS 和 Yarn 集群的搭建可以参考下面我的博客: https://blog.csdn.net/qq_436929 ...

  7. python知网查重_用Python写了个检测抄袭/文章去重算法(nshash)

    中国人有句话叫"天下文章一大抄",但是在正规场合下"抄"是要付出代价的,比如考试.写论文是不能抄的,一旦被发现后果相当严重.在互联网出现之前,"抄&q ...

  8. python上位机界面设计_用Python写界面--上位机开发

    Python真的可以说是无所不能,上到人工智能.图像识别.下到控制电机.爬虫.数据处理,前不久发现Python还可以做界面,虽然比较丑,但是还是可以一试. Python内置图形界面库--Tkinter ...

  9. python序列模式的关联算法_关联算法

    以下内容来自刘建平Pinard-博客园的学习笔记,总结如下: 1 Apriori算法原理总结 Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合 ...

最新文章

  1. Android layer-list 使用
  2. Spring Cloud微服务实战:手把手带你整合eurekazuulfeignhystrix
  3. linux中如何授权限,Linux系统下,为普通用户授权。
  4. 两个inline-block消除间距和对齐(vertical-align)
  5. Spring MVC + Hibernate + Maven:CRUD操作示例
  6. xcode w情ndows版,xcode Windows版安装使用介绍
  7. Swift中文教程(二十) 扩展
  8. 由“美图秀秀”软件的网站,看网站的生存模式
  9. ST、SC、FC、LC光纤接头区别
  10. 定积分数值计算(C++实现)
  11. Dell服务器重装系统
  12. Git 使用之鉴权失败
  13. U-Net-Convolutional Networks for Biomedical Image Segmentation论文翻译——中文版
  14. 浅谈Redis延迟测试方法
  15. 【男保姆式】教你打开第一个微信小程序
  16. Pytorch混合精度训练
  17. java.lang.ClassNotFoundException:org.glassfish.gmbal.ManagedObjectManager
  18. mysql 判断时间是否当天_MySQL 获取当天日期
  19. 唤起qq聊天,拨打电话等
  20. 世界各国国土面积排名

热门文章

  1. Swift傻傻分不清楚系列(六)集合类型
  2. 2018-2019-2 网络对抗技术 20165305 Exp6 信息搜集与漏洞扫描
  3. Effective Java(1)-创建和销毁对象
  4. (2.15)备份与还原--使用作业备份、清理过期备份、清理历史记录、事务日志是否备份过...
  5. WPF 带CheckBox、图标的TreeView
  6. net与树莓派的情缘-安装与卸载MySql(五)
  7. php - preg_match
  8. 在WinForm中实现省市级联的效果
  9. vue从入门到精通之进阶篇(四)模块化工具 webpack
  10. node --- 一个很好用的包json-server