`

数据结构复习之插入排序

阅读更多

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

插入排序方法:直接插入排序、折半插入排序、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排序

    有空研究一下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    数据结构复习资料 数据结构 复习 资料

    这份"数据结构复习资料"包含了全面的学习资源,特别是模拟题及答案,对于准备相关考试或提升编程技能来说极其有价值。 一、数据结构基础 数据结构主要分为两大类:线性结构和非线性结构。线性结构如数组、链表、栈...

    数据结构复习代码

    本压缩包“数据结构复习代码”包含了用于学习数据结构的相关代码,非常适合正在学习或复习数据结构的人士。 数据结构主要分为两大类:线性结构和非线性结构。线性结构包括数组、链表、栈和队列。数组是最基础的数据...

    计算机考研数据结构复习指导Word版

    这份"计算机考研数据结构复习指导Word版"提供了一条有效的学习路径,帮助考生们精准定位并攻克这个领域的关键点。 复习指导文档《复习指导(数据结构部分).doc》可能涵盖了以下内容: 1. **基本概念**:数据结构...

    华南理工大学数据结构复习提纲二

    华南理工大学的“数据结构复习提纲二”文档无疑为备考的学生提供了宝贵的资源,涵盖了重要的概念、问题及其解答。在这个复习提纲中,我们可以期待找到关于以下关键知识点的详细内容: 1. **基本概念**:数据结构是...

    北京邮电大学809数据结构复习指南

    【北京邮电大学809数据结构复习指南】是一份由成功上岸北邮AI院的学长编写的详尽复习资料,旨在帮助备考北邮研究生考试的学生,特别是那些选择809数据结构作为专业课的考生。复习指南依据北邮研究生招生网的考试大纲...

    数据结构复习资料及试卷(c++版)

    本复习资料及试卷(C++版)是针对软件工程专业和计算机专业学生的重要学习资源,旨在帮助他们深入理解和掌握数据结构的基本概念、算法及其在C++编程中的实现。 1. **链表**:链表是一种动态数据结构,每个元素...

    数据结构期末复习例题

    本段内容首先总结了数据结构的一些基础知识,随后通过一系列例题展示了数据结构在实际...综合来看,文档所涵盖的内容是数据结构学习的重要部分,不仅包括理论知识,还涉及具体的实现和应用,适合期末复习时参考和练习。

    数据结构复习重点归纳

    2. 线性表:线性表是最基础的数据结构之一,分为顺序存储和链式存储。顺序存储包括静态链表和动态分配,链式存储则涉及单链表、循环链表、双向链表和双向循环链表。重点是理解这些结构的操作,如插入、删除、查找,...

    数据结构复习资料

    以下是基于“数据结构复习资料”这个主题,结合提供的压缩包文件内容,所涵盖的一些关键知识点的详细说明: 1. **数组**:数组是最基本的数据结构,它是由相同类型的元素按照特定顺序排列的集合。在数组中,每个...

    数据结构复习题及答案

    这份“数据结构复习题及答案”压缩包提供了丰富的学习材料,帮助学习者巩固和理解数据结构的基本概念、算法及其应用。 1. **基本概念** - **数据结构**:数据结构是指数据的组织方式,包括数组、链表、栈、队列、...

    清华严蔚敏 数据结构复习重点

    "数据结构复习重点归纳(适于清华严蔚敏)-PDF格式.pdf"这份文档很可能是对严蔚敏教授教材的重点提炼,包含了关键概念、公式、例题和解题策略。"使用说明.URL"可能是一个链接,指向更多学习资源或者解答常见问题的...

    2018级数据结构复习资料_settlersfme_数据结构_数据结构复习_

    本复习资料“2018级数据结构复习资料_settlersfme_数据结构_数据结构复习”是针对学习者进行期末考试准备的宝贵资源,虽然没有直接的答案,但通过这些资料,学习者可以深入理解和掌握数据结构的基本概念、方法和应用...

    数据结构考研复习资料

    数据结构是计算机科学与技术专业研究生入学考试中的核心科目之一,它主要研究如何在计算机中组织和管理数据,以便高效地进行存储、检索和处理。本复习资料旨在帮助考生全面理解和掌握数据结构的基础理论、基本概念和...

    数据结构 考试 试卷 数据结构期末复习

    本资料主要针对数据结构期末考试进行复习,涵盖了数据结构的基本概念、主要类型以及相关的算法设计与分析。 1. **基本概念**:在数据结构中,数据是信息的载体,而数据结构则是数据的组织方式。常见的数据结构有数...

    数据结构复习资料整理

    数据结构包括逻辑结构(如线性、树形、图形)、存储结构(顺序、链式、索引、散列)和运算(插入、删除、修改、查找、排序)。 3. 在线性结构中,如顺序表,第一个元素没有前驱,最后一个元素没有后续。在树形结构...

    数据结构复习资料(有答案)

    这份"数据结构复习资料(有答案)"显然是针对那些准备数据结构考试的学生设计的,包含了对数据结构基本概念、算法以及实践应用的全面复习。 首先,我们要理解数据结构的基本类型。这些通常包括数组、链表、栈、队列...

Global site tag (gtag.js) - Google Analytics