插入排序算法

  • 插入排序算法

##1. 简单介绍
###1.1 排序
什么是排序?字如其意。就是将一串数字以一定的顺序排列。
排序是一个操作,也是一个事件。这便有“时间,地点,人物,起因,经过,结果”这事件的六大要素。在这个排序的过程中,这6个要素分别具体代表什么,下面容我慢慢分析。

时间:算法消耗掉时间,通常有运行时间,编译时间,读取io数据的时间等等;
地点:计算机内部;(很多时候是这样吧,当然也存在路由的情况)
人物:操作的数据,数据可能是内存内,也可能在任何存储介质之内;
起因/经过/结果:算法操作;

其中,一个算法通常有输入和输出,输入又分为值输入和引用输入,这造成的结果就是原数据改变和原数据不变的情况;

插入排序算法,是排序算法的一种。排序算法就是将一个数据集进行一系列操作,改变其中数据的排列顺序。
为了方便,我们在讲解排序算法的时候就以如下一组无序算法进行讲解。

[1,5,9,2,3,19,0,2]

注意:
这组数据集中的数据是有重复的,这会造成排序中常说的绝对位置改变和未改变。
简单来说,这边有两个数字2;分别记作2(1),2(2)。
排序完成后可能出现:
情况1: 2(1),2(2); 情况2: 2(2),2(1);
我们通常将情况1称为绝对位置未改变,情况2喂绝对位置改变。

###1.2 插入排序原理
算法导论中是以这样的例子引题的:
一个人在抽牌。第一张抽中数字3,将其放在1号位;第二张抽中数字2 ,将数字2放置在1号位,数字3变为2号位;第三张抽中数字1,将数字1放在1号位,数字2放在2号位,数字3放在3号位;
仔细想想大家会发现,每次多一张牌,这张牌会放在原有序序列的某一处。就好像插入其中一张,算法因此得名。
这个算法有一个重要特性是,抽n张牌的时候,之前的n-1张牌都是有序的。
###1.3 算法实现
伪代码:

Java代码:

package com.us.demo.rule;

public class Rule01 {
	
	public static void main(String []args){
		int []array={1,5,9,2,3,19,0,2};
		//System.out.println(array.length); //length 就是数组中数字的个数
		// 这边是直接改变原来的数组
		// int i=1;i<array.length;i++ 这边直接从1开始可以少进行一次的计算
		for(int i=1;i<array.length;i++){
			int tmp=array[i];//tmp 即待插入的数字
			int j=i;
			while((j>0)&&(array[j-1]>tmp)){
				array[j]=array[j-1];
				j--;//注意这边j最小为0 用j>0来保证array[j-1] 不会指向一个空的位置
			}
			array[j]=tmp;
		}
		
		//查看排序结果
		for(int i=0;i<array.length;i++){
			System.out.print(" "+array[i]);
		}
		//仔细想想 其中2(1) 2(2)的觉得位置并没有发生改变
	}
}

ps:真的是框架写多了,人会对某些框架有些依赖。算法也好久没有写了,慢慢拾起来吧。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值