插入算法分别从C,java,python三种语言进行书写
真正学懂计算机的人(不只是“编程匠”)都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。
作为一个初级编程人员或者说是一个程序员,算法对其是非常重要的,个人建议,如果你是正在读相关专业的大学学生,希望能够接触一些基本的算法。就算不能熟练掌握,不能够写出优美代码,也需要了解其中思想。因为有可能在以后的某个项目中,你就会用到。这是每个程序员都需要掌握的“内功”。不学,可能就会吃亏。因为,不管在什么时候,算法都是计算机科学领域最重要的基石之一。
小编想到哪里就写到哪里,也许可能在某些地方表达的不太准确,大神不喜可以评论,但小编有个请求,也不要喷小编。
插入算法总结来说就是将由小到大进行排序或者你也可以进行由大到小进行排序。
基本原理就是,将数组中的第一个数当作是有序数列,将第 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三种语言进行书写的更多相关文章
- AES加密php,java,.net三种语言同步实现加密、解密
话不多数上代码: java::: /* * To change this license header, choose License Headers in Project Properties. * ...
- Java程序员的现代RPC指南(Windows版预编译好的Protoc支持C++,Java,Python三种最常用的语言,Thrift则支持几乎主流的各种语言)
Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...
- java php c# 三种语言的AES加密互转
java php c# 三种语言的AES加密互转 最近做的项目中有一个领取优惠券的功能,项目是用php写得,不得不佩服,php自带的方法简洁而又方便好用.项目是为平台为其他公司发放优惠券,结果很囧的是 ...
- Java的三种代理模式
Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...
- Java的三种代理模式简述
本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...
- 理解java的三种代理模式
代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing(). 1 public class ...
- java 的三种代理
java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作, ...
- Java的三种代理模式(Spring动态代理对象)
Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...
- 【转】python 三种遍历list的方法
[转]python 三种遍历list的方法 #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '__main__': list ...
随机推荐
- 【Raspberry pi】系统安装及基础配置
1.系统安装 见官网:http://www.raspberrypi.org/quick-start-guide 2.基础配置 转载自http://www.eeboard.com/bbs/thread- ...
- Tweened Animations 渐变动作
Tweened Animations 渐变动作 Animations分两类: 第一类:渐变的(Tweened): 淡入淡出(Alpha),旋转(Rotate),移动(Translate),缩放(Sca ...
- 源码分析——Action代理类的工作
Action代理类的新建 通过<Struts2 源码分析——调结者(Dispatcher)之执行action>章节我们知道执行action请求,最后会落到Dispatcher类的serv ...
- 如果 date_field = TRUNC(date_field) 就说明时分秒为0(也就是不包含),否则就包含时分秒
如果 date_field = TRUNC(date_field) 就说明时分秒为0(也就是不包含),否则就包含时分秒
- JZOJ.5257【NOIP2017模拟8.11】小X的佛光
Description
- 【BZOJ3522】[Poi2014]Hotel 树形DP
[BZOJ3522][Poi2014]Hotel Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房 ...
- iOS Xcode之SVN(remove git)
项目用SVN比较多,所以大家都把精力放在如何在XCODE上使用SVN. 配置SVN当然是很简单,但提交都默认出现git的提交窗,否则要到repositories界面去提交. 目前没有找到什 ...
- 160629、 DBCP、C3P0、Proxool 、 BoneCP开源连接池的比较
简介 使用评价 项目主页 DBCP DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用 可以设置最大和最小连接,连接等 ...
- 超哥带你学网络编程部分blog
https://www.cnblogs.com/clschao/articles/9593164.html 网络编程 https://www.cnblogs.com/clschao/articles ...
- POJ 2253 Frogger【最短路变形——路径上最小的最大权】
链接: http://poj.org/problem?id=2253 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...