插入算法分别从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 ...
随机推荐
- Dependency Property 依赖属性
依赖属性就是一种可以自己没有值,并能通过使用Binding从数据源获得值(依赖在别人身上)的属性.拥有依赖属性的对象称为“依赖对象”. WPF开发中,必须使用依赖对象作为依赖属性的宿主,使二者结合起来 ...
- 【SR】MAP
MAP:最大后验概率(Maximum a posteriori) 估计方法根据经验数据获得对难以观察的量的点估计.它与最大似然估计中的 Fisher方法有密切关系, 但是它使用了一个增大的优化目标,这 ...
- 图像增强:直方图均衡和小波变换【matlab】
直方图均衡:统计图像像素灰度的直方图分布.对其进行重新分配以使图像的直方图分布更加均衡. 小波变换:图像轮廓主要体现在低频部分,可以通过对低频分解系数进行增强处理,对高频分解系数进行衰减处理,达到图像 ...
- python3----练习题(弹幕跟随)
# 导入模块 import requests # 1. 网络请求 2.pip install requests import time # 用于时间控制 import random # 随机模块 产生 ...
- Django中的过滤器
Django 过滤器 过滤器 描述 示例 upper 以大写方式输出 {{ user.name | upper }} add 给value加上一个数值 {{ user.age | add:”5” ...
- 【转】 JS实现HTML标签转义及反转义
原文地址:http://blog.600km.xyz/2015/12/15/js-encode-html-tags/ 简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中 ...
- python2 打印菱形
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列. 程序源代码: #!/usr/bin/python # -*- coding: UT ...
- 9.Query on Embedded/Nested Documents-官方文档摘录
1.插入案例 db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: & ...
- Numpy常用操作方法
NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准数学函数(无需编 ...
- MongoDB-5: 查询(游标操作、游标信息)
一.简介 db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段.并返回到匹配文档的游标,可以随意修改查询限制.跳跃.和排序顺序的 ...