博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
插入排序
阅读量:5347 次
发布时间:2019-06-15

本文共 1138 字,大约阅读时间需要 3 分钟。

包括直接插入排序,希尔插入排序。

  • 直接插入排序:

将一个记录插入到已经排序好的有序表中。

1, sorted数组的第0个位置没有放数据。

2,从sorted第二个数据开始处理:

如果该数据比它前面的数据要小,说明该数据要往前面移动。

a,首先将该数据备份放到 sorted的第0位置当哨兵。

b,然后将该数据前面那个数据后移。

c,然后往前搜索,找插入位置。

d,找到插入位置之后讲 第0位置的那个数据插入对应位置。

O(n*n), 当待排记录序列为正序时,时间复杂度提高至O(n)。

实例:

  • 希尔排序(缩小增量排序 diminishing increment sort):

先将整个待排记录序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。

实例:

插入排序Java代码:

public class InsertionSort {//   插入排序:直接插入排序,希尔排序        public void straightInsertionSort(double [] sorted){ int sortedLen= sorted.length; for(int j=2;j
=0;k--){ if(sorted[k]>sorted[0]){ sorted[k+1]=sorted[k]; }else{ insertPos=k+1; break; } } sorted[insertPos]=sorted[0]; } } } public void shellInertionSort(double [] sorted, int inc){ int sortedLen= sorted.length; for(int j=inc+1;j
=0;k-=inc){ if(sorted[k]>sorted[0]){ sorted[k+inc]=sorted[k]; //数据结构课本上这个地方没有给出判读,出错: if(k-inc<=0){ insertPos = k; } }else{ insertPos=k+inc; break; } } sorted[insertPos]=sorted[0]; } } } public void shellInsertionSort(double [] sorted){ int[] incs={ 7,5,3,1}; int num= incs.length; int inc=0; for(int j=0;j

转载于:https://www.cnblogs.com/yuyu666/p/9828081.html

你可能感兴趣的文章
2018/12/18 JS会像Linux一样改变编程
查看>>
php环境搭建脚本
查看>>
FTP主动模式与被动模式说明
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
【Python3 爬虫】15_Fiddler抓包分析
查看>>
高性能JavaScript-JS脚本加载与执行对性能的影响
查看>>
关于标签之间因为换行等问题造成的空白间距问题处理
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>
[MFC][DShow]简单例子
查看>>
降序排列
查看>>
十一、类型转换
查看>>