`

数据结构复习之插入排序

阅读更多

插入排序的基本思想:逐个考察待排序队列中的每个元素,将元素插入到前面已经排好序队列的适当位置,使得到的新队列任然有序。

插入排序方法:直接插入排序、折半插入排序、shell排序。

1.直接插入排序

排序原理:对一个元素的序列总是有序的,对N序列来说,从第二个元素开始到第N个元素,逐个向有序队列中添加元素(插入操作).从而使N序列有序。对j-1个元素的有序序列插入一个元素的方法:(假设升序排列)从j-1开始往前找,如果当前元素比要插入的元素大(temp<arr[k]),则将当前元素后移,直到找到插入位置(temp>arr[k]).在插入元素。

public static void insertSort(int[] arr){
	int len = arr.length;
	//i=0 只有一个元素,认为是有序队列,所以从i=1开始.
	for(int i=1;i<len;i++){
              //小于时需要将r[i] 插入到有序队列中
		if(arr[i]<arr[i-1]){		
		 	int temp = arr[i];//取出当前值
		   	arr[i] = arr[i-1];//队列后移 
			int j = i-2; //temp 要和有序队列中的前i-1个(0到i-2)元素比较.(arr[i-1]已经比较过了)
			//比较并后移.
			for(;j>=0&&arr[j]>temp;j--){
		    	  arr[j+1] = arr[j];
			}
		 	arr[j+1] = temp;//插入正确位置.
		}
	}
}

 

 

2.折半插入排序

  排序原理:通过折半查找的方式在有序序列中确定元素要插入的位置,其他和直接插入一样。

 

 

public static void biinsertSort(int[] arr){
	int len = arr.length;
	for(int i=0;i<len;i++){	
		//二分查找的方式查找元素要插入的位置
		int low = 0;
		int hight = i-1;
		int temp  = arr[i]; //取出要插入元素的值,否则元素后移覆盖.
		while(low<=hight){
			int mid = (low+hight)/2;
			if(arr[i]<arr[mid]){
				hight = mid-1;
			}else{
				low = mid+1;
			}
		}
			
		//在hight到i-1位置的元素往后移动.
		for(int j = i-1;j>hight;j--){
			arr[j+1] = arr[j];
		}
		arr[hight+1] = temp;//插入元素
	}}

 

 

 3.shell排序

    有空研究一下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    数据结构总结(自学、期末复习或考研备用).pdf

    、链地址法、开放地址法、第九章排序、直接插入排序、折半插入排序、表插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、固定最大值再构造堆、归并排序、桶排序、基数排序 各种排序方法的综合比较

    数据结构期末复习例题

    一共五页,包括数据结构总结,图的总结,以及(1)直接插入排序(2)希尔排序(3)冒泡排序(4)快速排序(5)简单选择排序(6)堆排序(7)归并排序(8)基数排序的例子。

    python数据结构与算法详解与源码

    数据结构与算法(Python) 一、引入概念 1-01算法引入 1-02 时间复杂度与大O表示法 1-03-最坏时间复杂度与计算规则 1-04-常见时间复杂度与大小关系 1-05-代码执行时间测量模块 1-06-Python列表类型不同操作的...

    数据结构-3期(KC002) 直接插入排序算法.docx

    数据结构-3期(KC002) 直接插入排序算法.docx 学习资料 复习资料 教学资源

    随手笔记--数据结构与算法(Java)排序

    内容概要:这是本人在复习数据结构排序算法所写的markdown文档,对各个算法进行了比较,分析其稳定性。通过对六种排序算法的介绍,了解其中的核心原理,手写源码过程中对其代码进行注释讲解。 适用人群:本人文档是...

    数据结构与算法综合资料库

    插入排序法 程序设计:哈希表的一个应用 多维数组下标操作符重载一法 汉诺塔的非递归 回朔法一例 几道有趣的算法题 阶梯问题的递归解法 精确迭代法 矩阵求逆的快速算法 快 速 排 序 马踏棋盘问题 冒 泡 法 排序算法 ...

    数据结构与算法综合资料库.CHM

    插入排序法 程序设计:哈希表的一个应用 多维数组下标操作符重载一法 汉诺塔的非递归 回朔法一例 几道有趣的算法题 阶梯问题的递归解法 精确迭代法 矩阵求逆的快速算法 快 速 排 序 马踏棋盘问题 冒 泡 法 排序算法 ...

    数据结构与算法复习题.doc

    数据结构与算法复习题 1. 写出以下各词语对应的中文(英) sequential storge structure 顺序存储结构 Abstract Data Type (ADT) 抽象数据类型 二叉排序树 Binary sort tree queue 队列 storge structure 存储结构 ...

    数据结构与算法复习(Java):排序、字符串、数组、链表、二分查找、二叉树.zip

    基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,...

    数据结构和算法的复习.zip

    基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,...

    数据结构各个章节复习题及其答案

    各个章节的复习题及答案,已整理好 需要的同学可下来看

    数据结构与算法复习.zip

    基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,...

    数据结构复习题纲要1

    第一趟:{1,4,7,2,8,3} 第二趟:{1,2,4,7,8,3} 第三趟:{1,2,3,4,7,8} 第一趟:分成5组,直接插入排序后为(30,80)(7

    数据结构与算法分析第二版 ---C语言描述(附加答案)

    堆6.6 左式堆6.6.1 左式堆的性质6.6.2 左式堆的操作6.7 斜堆6.8 二项队列6.8.1 二项队列结构6.8.2 二项队列操作6.8.3 二项队列的实现总结练习参考文献第7章 排序7.1 预备知识7.2 插入排序7.2.1 算法7.2.2 插入排序的...

    数据结构(严版)讲义

     使用教材《数据结构》C语言版 严蔚敏,清华大学出版社。  章节 去掉 第5、8、11、12章 去掉 **部分 去掉1.3,2.4,4.4 二、复习提示 1. 经典算法 单链表:遍历、插入、删除 循环队列:队列空、队列满的条件 ...

    数据结构讲义(严蔚敏版)

     使用教材《数据结构》C语言版 严蔚敏,清华大学出版社。  章节 去掉 第5、8、11、12章 去掉 **部分 去掉1.3,2.4,4.4 二、复习提示 1. 经典算法 单链表:遍历、插入、删除 循环队列:队列空、队列满的条件 ...

    数据结构与算法研究(强烈推荐)

    对以下四种算法详细地进行了分析:插入排序、希尔排序、堆排序以及快速排序。堆排序平均情形运行时间的分析对于这一版来说是新的内容。本章末尾讨论了外部排序。 第8章讨论不相交集算法并证明其运行时间。这是短且...

    数据结构与算法分析

     本书是数据结构和算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书的内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、摊还分析、查找...

    数据结构及算法编程(阿蒙工作室)

    ☆ 插入排序法 ☆ 程序设计:哈希表的一个应用 ☆ 多维数组下标操作符重载一法 ☆ 汉诺塔的非递归 ☆ 何谓数据结构 ☆ 回朔法一例 ☆ 几道有趣的算法题 ☆ 阶梯问题的递归解法 ☆ 精确迭代法 ☆ 矩阵求逆的快速算法 ...

Global site tag (gtag.js) - Google Analytics