- 浏览: 127471 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (145)
- java (145)
- Java网络编程 (1)
- SWT 文本框Text通过GC重绘改变边框颜色 (1)
- tomcat部署web工程的两种方法 (1)
- JAX-RS 从傻逼到牛叉 1:REST 基础知识 (1)
- FreyjaJdbcTemplate 大致上完工了,想请人重构。。 (1)
- 开始认识自己 (1)
- 设计模式-Abstract Factory 模式 (1)
- 数据库中主键的设计原则 (1)
- JNI中jstring类型与c语言中的字符串的转换 (1)
- mac环境变量 (1)
- STC单片机ADC转换的例子 (1)
- myeclipse 8下安装Ibator . (1)
- OSGI与Android结合 (1)
- CSDN BLOG EXPERT (1)
- Java中网络操作的开源库CommonsNet (1)
- Apache License Version 2.0 英文内容及中文翻译 (1)
- JTest (1)
- GeoCon 用C#编写的开源的地理信息数据转换工具 (1)
- ERP简易教程 (1)
- 提高站点在搜索引擎上的排名 (1)
- Wifi (1)
- 腾讯Q+开放平台,相信又是一次成功的模仿 (1)
- C#坦克大战网络版代码 (1)
- Problem16 (1)
- Ajax 应该变成 Ajaj (关于JSON 与 XML 的比较) (1)
- ava框架数据库连接池比较(c3p0 (1)
- dbcp和proxool)bonecp (1)
- 继续向成熟男人靠拢 (1)
- Qt4.7中 默认的构造函数 (1)
- xml CDATA (1)
- 只针对中英文混合分词的中文分词器 (1)
- 典型相关分析及其适用范围和spss操作(转) (1)
- llvm (1)
- java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access (1)
最新评论
-
xm3530:
什么鬼?都没法看,发出来干嘛
Android中利用App实现消息推送机制的代码实例 -
lvtenglongxiaohei:
太经典了!
学习一下!
ERP简易教程 -
lvtenglongxiaohei:
<br> 一天中午,丈 ...
ERP简易教程 -
hzw2312:
加油~~~!!!
开始认识自己 -
123048591:
显示乱码
tomcat部署web工程的两种方法
插入排序思想<br>1、分类:把数组r的数据分成2类,a = { 已排序的子数组 },b = { 未排序的子数组 }。<br>2、排序:遍历b,依次取b中各个数据插入到a中的适当位置。<br><br>直接插入排序<br>设数组 r[0,1,...,n] = { a[0,1,...,i-1], b[i,i+1,...,n] } (数组从0开始计数,i=1,2,...,n-1)。<br>遍历数组r: i从1到n-1,i始终指向b的第一个元素,拿r[i]=b[i]倒序到a中比较(a[i-1],a[i-2],...,a[0]),若a中当前比较值a[j]比b[i]大,则把a[j]往后挪一位,b[i]继续向前倒序比较;否则,b[i]插入a[j]后面那个位置a[j+1]。
测试用例
插入排序
排 序 前:[11,14,9,13,20,5,12,3,18,4,0,19,1,15,8,2,16,7,6,17,10]
升序排序后:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
希尔排序
排 序 前:[11,14,9,13,20,5,12,3,18,4,0,19,1,15,8,2,16,7,6,17,10]
升序排序后:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
<br>总结:<br>1、直接插入排序,是一种稳定的排序算法;希尔排序,是一种不稳定的排序算法。<br><br>2、直接插入排序,在表初态为正序时取得最好时间复杂度为o(n),在表初态为反序时取得最坏时间复杂度为o(n^2)。<br><br>3、希尔排序时间性能优于直接插入排序的原因:<br> a、直接插入排序,在表初态为正序时所需时间最少。<br> b、希尔排序采用分组插入,使得每次在小数组里使用直接插入排序时,小数据的长度n较小。当n较小时,n和n^2差别
不大,由总结第2条可知,对小数组直接插入排序因表初态影响时间复杂度较小,即小数组直接插入排序较快。
c、希尔排序,先用小数组排序,再用大数组排序。该排序算法运行到后面时,经过小数组排序的大数组也接近有序状
态,由a可知,此时对大数组进行插入排序速度较快。
<br>4、表面感觉希尔排序比较的次数比直接插入排序多,直接插入排序只用2个循环,希尔排序却要用3个循环。
这是表面感觉,实际分析一下这2个算法都是在进行下面的比较,只是比较的方法不一样而已:
都是拿r[i] (i=1,2,...,r.length-1)倒序和表初态排在它前面的数据r[j](j=0,1,...,i-1)进行比较。
public class insertsort { public int[] sort(int[] arr){ for(int i=1; i<arr.length; i++){ int j=i-1,tmp=arr[i]; while(j>=0 && arr[j]>tmp){ arr[j+1] = arr[j]; j--; } arr[j+1] = tmp; } return arr; } }<br><br>希尔排序<br>希尔排序采用分组插入思想:1、取一个小于r.length的整数gap1,把r分成gap1个小组(所有距离为gap1的数据放在同一小组),在各组内进行直接插入排序。 2、取小于gap1的整数gap2,重复第1步的分组和排序。 3、重复第2步,直至gap(k)=1,整个重复过程中gap(k)<gap(k-1)<……<gap2<gap1,其中当gap(k)=1时相当于所有记录放在同一组中进行插入排序。
public class shellsort { public int[] sort(int[] arr){ for(int gap=arr.length; gap>0; gap=gap/2){ for(int i=gap; i<arr.length; i++){ int j=i-gap,tmp = arr[i]; while(j>=0 && arr[j]>tmp){ arr[j+gap] = arr[j]; j = j - gap; } arr[j+gap] = tmp; } } return arr; }}
测试用例
public class sorttest extends testcase { public int[] getsortdatas(){ return new int[]{11,14,9,13,20,5,12,3,18,4,0,19,1,15,8,2,16,7,6,17,10}; } public void testinsertsort(){ insertsort sorttool = new insertsort(); int[] arr = getsortdatas(); system.out.print("排 序 前:"); printutils.printintarr(arr); int[] arr1 = sorttool.sort(arr); system.out.print("升序排序后:"); printutils.printintarr(arr1); } public void testshellsort(){ shellsort sorttool = new shellsort(); int[] arr = getsortdatas(); system.out.print("排 序 前:"); printutils.printintarr(arr); int[] arr1 = sorttool.sort(arr); system.out.print("升序排序后:"); printutils.printintarr(arr1); } }<br>运行结果:
插入排序
排 序 前:[11,14,9,13,20,5,12,3,18,4,0,19,1,15,8,2,16,7,6,17,10]
升序排序后:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
希尔排序
排 序 前:[11,14,9,13,20,5,12,3,18,4,0,19,1,15,8,2,16,7,6,17,10]
升序排序后:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
<br>总结:<br>1、直接插入排序,是一种稳定的排序算法;希尔排序,是一种不稳定的排序算法。<br><br>2、直接插入排序,在表初态为正序时取得最好时间复杂度为o(n),在表初态为反序时取得最坏时间复杂度为o(n^2)。<br><br>3、希尔排序时间性能优于直接插入排序的原因:<br> a、直接插入排序,在表初态为正序时所需时间最少。<br> b、希尔排序采用分组插入,使得每次在小数组里使用直接插入排序时,小数据的长度n较小。当n较小时,n和n^2差别
不大,由总结第2条可知,对小数组直接插入排序因表初态影响时间复杂度较小,即小数组直接插入排序较快。
c、希尔排序,先用小数组排序,再用大数组排序。该排序算法运行到后面时,经过小数组排序的大数组也接近有序状
态,由a可知,此时对大数组进行插入排序速度较快。
<br>4、表面感觉希尔排序比较的次数比直接插入排序多,直接插入排序只用2个循环,希尔排序却要用3个循环。
这是表面感觉,实际分析一下这2个算法都是在进行下面的比较,只是比较的方法不一样而已:
都是拿r[i] (i=1,2,...,r.length-1)倒序和表初态排在它前面的数据r[j](j=0,1,...,i-1)进行比较。
发表评论
-
java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access
2012-02-08 14:17 1058<div>Java数据库连接(JDBC)由 ... -
llvm
2012-02-07 16:29 880llvm ... -
典型相关分析及其适用范围和spss操作(转)
2012-02-07 15:43 1583看文章《科学学研 ... -
只针对中英文混合分词的中文分词器
2012-02-03 10:39 1013该版本说明 1、只针对中英文混合分词 需要一些中文和 ... -
xml CDATA
2012-02-03 08:45 1210<h2 style="font-si ... -
Qt4.7中 默认的构造函数
2012-02-01 09:14 1088<p><span style=&qu ... -
继续向成熟男人靠拢
2012-01-11 17:04 879转自徒儿的人人。 ... -
ava框架数据库连接池比较(c3p0,dbcp和proxool)bonecp
2012-01-11 14:13 1135<h1 style="text ... -
Ajax 应该变成 Ajaj (关于JSON 与 XML 的比较)
2011-12-28 15:23 963<span style="font- ... -
Problem16
2011-12-28 12:53 668package com.shui.mu.yao.io. ... -
C#坦克大战网络版代码
2011-12-20 13:09 983简单C#坦克大战网络版代码 写完单机版 http ... -
腾讯Q+开放平台,相信又是一次成功的模仿
2011-12-20 10:44 861今天看到两则新 ... -
Wifi
2011-12-19 13:14 1086. Confirm if Wifi is On ... -
提高站点在搜索引擎上的排名
2011-12-19 12:04 937对于拥有网站的各位站长来说,都希望自己的站点能够在各种 ... -
ERP简易教程
2011-12-16 16:47 922注明:下面的帖子 ... -
GeoCon 用C#编写的开源的地理信息数据转换工具
2011-12-14 12:29 956<p class="MsoNorma ... -
JTest
2011-12-14 09:00 1029接到parasoft公司一位先生打来的电话,说下个月第 ... -
Apache License Version 2.0 英文内容及中文翻译
2011-12-13 12:59 2338</span> <p class= ... -
Java中网络操作的开源库CommonsNet
2011-12-13 12:39 817<p class="MsoNorma ... -
CSDN BLOG EXPERT
2011-12-13 08:59 1094<img src="http://p. ...
相关推荐
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。本文将深入探讨C语言实现的插入排序及其相关知识点。 首先,理解插入排序...
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
### 插入排序Java代码详解 #### 一、插入排序简介 插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,...
**插入排序**是一种基础且广泛使用的排序算法,尤其在数据量较小或者部分有序的情况下表现出较高的效率。它基于分治法的思想,将一个大问题分解成若干小问题来解决。在这个场景中,我们讨论的是如何使用分治法的思想...
此案例难度系数4,属于Scratch高级编程,插入排序相对而言比选择排序和冒泡排序理解起来要难一点,但是还是相对简单的排序,尤其是对少量元素排序的时候,效率较高;综合考查说话、随机数、无限循环(条件循环)、...
21、折半插入排序 22、21、折半插入排序 22、冒泡排序 21、折半插入排序 22、冒泡排序 23、快速排序 21、折半插入排序 22、冒泡排序 23、快速排序 24、简单选择排序 21、折半插入排序 22、冒泡排序 23、快速排序 24...
### 插入排序详解 #### 一、插入排序概述 插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上通常采用in-...
### 数据结构之直接插入排序详解 #### 一、引言 在计算机科学中,排序算法是数据处理中不可或缺的一部分,而直接插入排序是一种简单直观的排序方法。它的工作原理类似于我们手动排序一组卡片的方式——每次从未...
本实验涉及了六种常见的排序算法:泡泡排序、直接插入排序、折半插入排序、希尔排序、直接选择排序,并且对每种排序算法进行了性能分析,包括统计执行时间、比较次数和交换次数。这些数据被保存在TXT文件中,便于...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
下面将详细讲解这7种排序算法:快速排序、归并排序、插入排序、选择排序、冒泡排序、堆排序以及希尔排序。 1. **快速排序**:由C.A.R. Hoare提出的,采用分治策略。基本思想是选取一个基准元素,通过一趟排序将待...
根据提供的文件信息,我们可以深入探讨几种经典的排序算法:冒泡排序、直接插入排序、快速排序以及希尔排序。这些算法在数据结构与算法课程中是非常重要的基础内容,它们各自有着独特的特性和应用场景。 ### 1. ...
### 数据结构:直接插入排序算法解析 #### 一、引言 在计算机科学领域,排序是一种常见的操作,用于将一组无序的数据按照特定的顺序排列。插入排序是一种简单直观的排序算法,它的工作原理类似于人们手工排序扑克...
本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...
全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...
### 数据结构之折半插入排序 #### 知识点概览 1. **折半插入排序的基本概念** 2. **折半插入排序算法原理** 3. **折半插入排序的时间复杂度分析** 4. **折半插入排序的空间复杂度分析** 5. **折半插入排序与普通...
在本文中,我们将深入探讨四种经典的排序算法:插入排序、选择排序、基数排序和冒泡排序,以及它们在C++语言中的实现。 **插入排序(Insertion Sort)** 插入排序是一种简单直观的排序算法,它的工作原理类似于我们...
### 直接插入排序与希尔排序的比较 #### 一、概述 本篇文章将通过一组具体的数据集(8个整数)对直接插入排序(Direct Insertion Sort)和希尔排序(Shell Sort)这两种排序方法进行深入分析和比较。这两种排序...