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的更多相关文章

  1. ZT 二分插入排序也称折半插入排序

    二分插入排序也称折半插入排序,基本思想是:设数列[0....n]分为两部分一部分是[0...i]为有序序列,另一部分是[i+1.....n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 ...

  2. 插入排序(直接插入、折半、Shell)

    直接插入排序(顺序插入排序) 基本思想: 排序过程,整个排序过程为n-1趟插入,即先将序列中的第1个元素看成是一个有序子序列,然后从第2个元素开始,逐个进行插入,直至整个序列有序. 在有序序列中插入一 ...

  3. 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)

    插入排序算法主要分为:直接插入算法,折半排序算法(二分插入算法),希尔排序算法,后两种是直接插入算法的改良.因此直接插入算法是基础,这里先进行直接插入算法的分析与编码. 直接插入算法的排序思想:假设有 ...

  4. 排序(4)---------希尔(shell)排序(C语言实现)

    由于考试耽搁了几天,不好意思~~~ 前面的介绍的三种排序算法,都属于简单排序,大家能够看下详细算法,时间复杂度基本都在0(n^2),这样呢,非常多计算机界.数学界的牛人就非常不爽了,他们在家里想啊想, ...

  5. 希尔shell排序——java实现

    希尔排序是对插入排序的优化,将插入排序的交换步长由1增加到h. 希尔排序的思想是使数组中任意间隔为h的元素有序.步长调幅为h = 3*h + 1, 也就是1,4,13,40,121,364, 1003 ...

  6. Java排序算法之希尔(Shell)排序

    基本思想: 希尔排序就是对直接插入排序的一个优化.现在有一个array,希尔排序就是设定一个增量incrementNum(0<incrementNum<array.length).先从ar ...

  7. 插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数

    首先我们先介绍一下普通的插排,就是我们现在一般写的那种,效率是O(n^2)的. 普通的插排基于的思想就是找位置,然后插入进去,其他在它后面的元素全部后移,下面是普通插排的代码: #include< ...

  8. 4.7 希尔(shell)排序法

    4-7 ShellSort.c #include <stdio.h> #include "4-1 CreateData.c" //生成随机数的函数 #define AR ...

  9. 新年在家学java之基础篇--循环&数组

    因为“野味肺炎”的肆虐,过年被迫宅家只能吃了睡.睡了吃.这么下次只能长膘脑子空空,不如趁此机会重新学习java基础,为日后做铺垫~ 循环结构: 几种循环:for(::),while(){},do{}w ...

随机推荐

  1. MyBatis笔记----SSM框架mybatis3整合springmvc spring4

    上节 无springmvc框架 http://www.cnblogs.com/tk55/p/6661786.html 结构 jar包 web.xml 与index.jsp <?xml versi ...

  2. C#-hello world(二)

     1.C# 程序构成 命名空间(Namespace) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(Statements)和 表达式(Expressions) 注释 ...

  3. 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 ...

  4. td 元素属性 noWrap 防止折行、撑开及文字换行

    最近调试程序,遇到如下问题: 也就是这个表格里面的文字被换行了,究其原因,主要是td中的width之和超过了100%导致的.谷歌了好久,终于发现,可以用noWrap="noWrap" ...

  5. celery 定时任务

    用celery定时任务,定时删除文件夹 tasks.py from celery import Celery import os import shutil app = Celery('demo') ...

  6. KVM使用

    这里使用的是Ubuntu18.04桌面版虚拟机 关于KVM可以看一下我之前的博客,有一些简单的介绍. 1.在打开虚拟机之前先开启此虚拟机的虚拟化功能. 2.安装KVM及其依赖项 wy@wy-virtu ...

  7. LeetCode算法题-Power Of Three(Java实现-七种解法)

    这是悦乐书的第204次更新,第215篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第71题(顺位题号是326).给定一个整数,写一个函数来确定它是否为3的幂.例如: 输入 ...

  8. D. Diverse Garland

    题意:灯有三种颜色R,G,B.只要同一种颜色相邻就不可以.问最少需要换几次,可以使在一串灯中没有相邻灯的颜色相同. 思路:贪心思路:我们知道一个程序都是要子阶段,然后子阶段各个组合起来形成这个程序.那 ...

  9. 数据泵expdp 在rac环境下 paralle 的处理方法

    其实这个是个很常见的问题,写下来做纪念吧.说明:而在11GR2后EXPDP 和 IMDP的WORKER进程在设置parallel参数时会在多个INSTANCE启动,所以DIRECTORY必须在共享磁盘 ...

  10. CentOS 安装 clang

    Clang是一个C语言.C++.Objective-C.Objective-C++语言的轻量级编译器.源代码发布于BSD协议下.2013年4 月,Clang已经全面支持C++11标准,并开始实现C++ ...