插入排序专题 直接插入 折半 希尔shell
1.直接插入排序
分析:a[n]有n个元素 a[0...n-1] 从 i=1...n-1 a[i]依次与 a[0...n-2]数字进行比较
发现后面的数字大于前面的数字交换位置,每一次比较,与前面的数字x比较,小于等于x的话往前推a[j]=a[j+1],当大于a[j]时候 a[j+1]=a[i]插入
//插入排序
#include<iostream>
using namespace std;
void gcd(int a[],int start,int end){
int tmp;
int i,j;
//从第二个元素开始i=1---n-1
for(i=start+;i<end;i++){
tmp=a[i];
for(j=i-;tmp<a[j]&&j>=start;j--){
a[j+]=a[j];
}
a[j+]=tmp;
}
}
int main()
{
int n;
cin>>n;
int a[n];
for(int i=;i<n;i++) cin>>a[i];
gcd(a,,n);
for(int i=;i<n;i++) cout<<a[i]<<" ";
}
2.折半插入排序:在插入排序寻找位置改成折半查找
针对a[i],查找出a[j],使a[j]<=a[i],对a[j]之后的数字全部移动a[j]=a[j+1],a[i]插入到a[j]之后,
//插入排序
#include<iostream>
using namespace std;
void gcd(int a[],int start,int end){
int tmp;
int i,j,right,left,mid;
for(i=start+;i<end;i++){
tmp=a[i];
left=start;
right=i-;
while(left<=right){
mid=(left+right)/;
if(tmp<a[mid])
right=mid-;
else left=mid+;
// for(j=i-1;j>=left;j--) a[j+1]=a[j];
}
for(j=i-;j>=left;j--) a[j+]=a[j];
a[left]=tmp;
}
}
int main()
{
int n;
cin>>n;
int a[n];
for(int i=;i<n;i++) cin>>a[i];
gcd(a,,n);
for(int i=;i<n;i++) cout<<a[i]<<" ";
}
3.希尔shell插入排序
a.由于直接插入排序算法简单,在n很小的时候效率比较高,
b.正序越多,效率越高
#include<iostream>
using namespace std;
void shell(int a[],int start,int end,int gap){
int tmp;
int i,j;
for(i=start+gap;i<end;i++){//每gap段比较
tmp=a[i];
for(j=i-gap;tmp<a[j]&&j>=start;j-=gap) a[j+gap]=a[j];
a[j+gap]=tmp;
}
}
void gcd(int a[],int start,int end){
int gap=end-start;
while(gap>){
gap=gap/+;
shell(a,start,end,gap);
}
}
int main()
{
int n;
cin>>n;
int a[n];
for(int i=;i<n;i++) cin>>a[i];
gcd(a,,n);
for(int i=;i<n;i++) cout<<a[i]<<" ";
}
插入排序专题 直接插入 折半 希尔shell的更多相关文章
- ZT 二分插入排序也称折半插入排序
二分插入排序也称折半插入排序,基本思想是:设数列[0....n]分为两部分一部分是[0...i]为有序序列,另一部分是[i+1.....n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 ...
- 插入排序(直接插入、折半、Shell)
直接插入排序(顺序插入排序) 基本思想: 排序过程,整个排序过程为n-1趟插入,即先将序列中的第1个元素看成是一个有序子序列,然后从第2个元素开始,逐个进行插入,直至整个序列有序. 在有序序列中插入一 ...
- 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)
插入排序算法主要分为:直接插入算法,折半排序算法(二分插入算法),希尔排序算法,后两种是直接插入算法的改良.因此直接插入算法是基础,这里先进行直接插入算法的分析与编码. 直接插入算法的排序思想:假设有 ...
- 排序(4)---------希尔(shell)排序(C语言实现)
由于考试耽搁了几天,不好意思~~~ 前面的介绍的三种排序算法,都属于简单排序,大家能够看下详细算法,时间复杂度基本都在0(n^2),这样呢,非常多计算机界.数学界的牛人就非常不爽了,他们在家里想啊想, ...
- 希尔shell排序——java实现
希尔排序是对插入排序的优化,将插入排序的交换步长由1增加到h. 希尔排序的思想是使数组中任意间隔为h的元素有序.步长调幅为h = 3*h + 1, 也就是1,4,13,40,121,364, 1003 ...
- Java排序算法之希尔(Shell)排序
基本思想: 希尔排序就是对直接插入排序的一个优化.现在有一个array,希尔排序就是设定一个增量incrementNum(0<incrementNum<array.length).先从ar ...
- 插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数
首先我们先介绍一下普通的插排,就是我们现在一般写的那种,效率是O(n^2)的. 普通的插排基于的思想就是找位置,然后插入进去,其他在它后面的元素全部后移,下面是普通插排的代码: #include< ...
- 4.7 希尔(shell)排序法
4-7 ShellSort.c #include <stdio.h> #include "4-1 CreateData.c" //生成随机数的函数 #define AR ...
- 新年在家学java之基础篇--循环&数组
因为“野味肺炎”的肆虐,过年被迫宅家只能吃了睡.睡了吃.这么下次只能长膘脑子空空,不如趁此机会重新学习java基础,为日后做铺垫~ 循环结构: 几种循环:for(::),while(){},do{}w ...
随机推荐
- MyBatis笔记----SSM框架mybatis3整合springmvc spring4
上节 无springmvc框架 http://www.cnblogs.com/tk55/p/6661786.html 结构 jar包 web.xml 与index.jsp <?xml versi ...
- C#-hello world(二)
1.C# 程序构成 命名空间(Namespace) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(Statements)和 表达式(Expressions) 注释 ...
- Failed to decrypt protected XML node "DTS:Password" with error 0x8009000B "Key not valid for use in specified state.". You may not be authorized to access this information. This error occurs when t
Question SSIS包从A服务器搬迁到B服务器,运行报错 Description: Failed to decrypt protected XML node "DTS:Password ...
- td 元素属性 noWrap 防止折行、撑开及文字换行
最近调试程序,遇到如下问题: 也就是这个表格里面的文字被换行了,究其原因,主要是td中的width之和超过了100%导致的.谷歌了好久,终于发现,可以用noWrap="noWrap" ...
- celery 定时任务
用celery定时任务,定时删除文件夹 tasks.py from celery import Celery import os import shutil app = Celery('demo') ...
- KVM使用
这里使用的是Ubuntu18.04桌面版虚拟机 关于KVM可以看一下我之前的博客,有一些简单的介绍. 1.在打开虚拟机之前先开启此虚拟机的虚拟化功能. 2.安装KVM及其依赖项 wy@wy-virtu ...
- LeetCode算法题-Power Of Three(Java实现-七种解法)
这是悦乐书的第204次更新,第215篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第71题(顺位题号是326).给定一个整数,写一个函数来确定它是否为3的幂.例如: 输入 ...
- D. Diverse Garland
题意:灯有三种颜色R,G,B.只要同一种颜色相邻就不可以.问最少需要换几次,可以使在一串灯中没有相邻灯的颜色相同. 思路:贪心思路:我们知道一个程序都是要子阶段,然后子阶段各个组合起来形成这个程序.那 ...
- 数据泵expdp 在rac环境下 paralle 的处理方法
其实这个是个很常见的问题,写下来做纪念吧.说明:而在11GR2后EXPDP 和 IMDP的WORKER进程在设置parallel参数时会在多个INSTANCE启动,所以DIRECTORY必须在共享磁盘 ...
- CentOS 安装 clang
Clang是一个C语言.C++.Objective-C.Objective-C++语言的轻量级编译器.源代码发布于BSD协议下.2013年4 月,Clang已经全面支持C++11标准,并开始实现C++ ...