gap

排序算法总结

匿名 (未验证) 提交于 2019-12-02 23:55:01
#include <iostream> #include <list> #include <sstream> #include <map> #include <set> #include <queue> #include <map> #include <functional> #include <algorithm> #include <stack> #include <ctime> using namespace std; //冒泡排序(n2) //相邻元素交换,未交换结束,每次减1 void buble_sort(int a[], int n) { bool flag; do { flag = false; for (int j = 1; j < n; j++) { if (a[j - 1]>a[j]) { swap(a[j], a[j - 1]); flag = true; } } n--; } while (flag); } //插入排序,有序序列和无序序列,o(n*2),稳定 //从1开始依次和前面的有序序列相比,找到合适的插入位置插入 void insert_sort(int a[], int n) { int t,i,j; for (i = 1; i < n;i++) { t = a[i];//要插入的位置 for (j = i; j>0&&a[j-1]>t;j--)

python3中的希尔排序

狂风中的少年 提交于 2019-12-02 11:54:28
def shell_sort(alist): n = len(alist) # 初始步长 gap = round(n / 2) while gap > 0: # 按步长进行插入排序 for i in range(gap, n): j = i # 插入排序 while j>=gap and alist[j-gap] > alist[j]: alist[j-gap], alist[j] = alist[j], alist[j-gap] j -= gap # 得到新的步长 gap = round(gap / 2) alist = [54,26,93,17,77,31,44,55,20,99,64] shell_sort(alist) print(alist) 来源: https://www.cnblogs.com/Gdavid/p/11743876.html

排序算法之希尔排序的C++实现

荒凉一梦 提交于 2019-12-02 06:49:12
希尔排序其实是直接插入排序的一种优化,不过是增加了一个步长进行分组插入罢了,又称为缩小增量排序。其基本思想: 先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待gap=1时,再对全体元素进行一次直接插入排序,数组便是有序的了。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比直接插入有较大提高。 按定义直接实现: void shellsort1(int a[], int n) { int i, j, gap; for (gap = n / 2; gap > 0; gap /= 2) //步长 for (i = 0; i < gap; i++) //直接插入排序 { for (j = i + gap; j < n; j += gap) if (a[j] < a[j - gap]) { int temp = a[j]; int k = j - gap; while (k >= 0 && a[k] > temp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = temp; } } } 很明显,上面的shellsort1代码虽然对直观的理解希尔排序有帮助,但代码量太大了,不够简洁清晰。因此进行下改进和优化,以第二次排序为例

希尔排序(C++ & Python)

余生长醉 提交于 2019-12-02 06:48:07
希尔排序 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。 下面以数列{80,30,60,40,20,10,50,70}为例,演示它的希尔排序过程。 第1趟:(gap=4) 当gap=4时,意味着将数列分为4个组: {80,20},{30,10},{60,50},{40,70}。 对应数列: {80,30,60,40,20,10,50,70} 对这4个组分别进行排序,排序结果: {20,80},{10,30},{50,60},{40,70}。 对应数列: {20,10,50,40,80,30,60,70} 第2趟:(gap=2) 当gap=2时,意味着将数列分为2个组:{20,50,80,60}, {10,40,30,70}。 对应数列: {20,10,50,40,80,30,60,70} 注意:{20,50

C++实现希尔排序法

Deadly 提交于 2019-12-02 06:44:32
希尔排序法是对直接插入排序法的优化,通过设置一个增量,对原始序列进行分组,对每组用直接插入排序法排序再整合,再缩小增量,周而复始直至增量为1,完成排序,因此又叫**“缩小增量排序法”**。本节Jungle图文并茂介绍一下希尔排序法,并给出C++代码。 1.举例说明希尔排序法过程 以一个整数序列为例来说明{12,45,90,1,34,87,-3,822,23,-222,32},该组序列包含N=11个数。不少已有的说明中通常举例10个数,这里说明一下,排序算法与序列元素个数无关! 首先声明一个参数:增量gap。gap初始值设置为N/2。缩小方式一般为gap=gap/2. 第一步,gap=N/2=5,每间隔5个元素取一个数,组成一组,一共得到5组: 对每组使用插入排序算法,得到每组的有序数列: 至此,数列已变为: 第二步,缩小gap,gap=gap/2=2,每间隔2取一个数,组成一组,共两组: 同理,分别使用插入排序法,得到每组的有序数列: 至此,数列已变为: 第三步,进一步缩小gap,gap=gap/2=1,此时只有一组,直接使用插入排序法,玩完成排序,图略。 2.C++代码实现 每次分组排序,都打印出当前的序列状况以及当前的gap: void hillSort(int arr[],int N) { int i,j,gap; for(gap = N/2;gap>0;gap/=2) {

希尔排序

断了今生、忘了曾经 提交于 2019-12-01 17:22:05
希尔排序 什么是希尔排序? 希尔排序的本质就是分组插入排序 希尔排序的思想 将整个待排元素序列分割成若干个子序列 对子序列进行插入排序 依次缩减增量再次进行排序 这样往复直到整个序列元素基本有序(其实也就是增量足够小的时候) 再对整个序列进行一次直接插入排序,这次排序是在整个序列基本有序的状态,接近最好的状态 此时效果会很好 图解 注:转载自: dreamcatcher-cx博客 代码 package sort; import java.util.Arrays; public class ShellSort { public static void main(String[] args) { // TODO Auto-generated method stub int[] a= {9,8,7,6,5,4,3,2,1}; for(int k:a) { System.out.printf("%d ",k); } System.out.println(); shellSort(a); for(int k:a) { System.out.printf("%d ",k); } } public static void shellSort(int[] a) { int j,gap;//gap为增量 int n=a.length; for(gap=n/2;gap>0;gap/=2)/

Network in Network(2013),1x1卷积与Global Average Pooling

本秂侑毒 提交于 2019-12-01 04:53:45
目录 写在前面 mlpconv layer实现 Global Average Pooling 网络结构 参考 博客: blog.shinelee.me | 博客园 | CSDN 写在前面 《Network in Network》 简称NIN,出自 颜水成老师 团队,首次发表在arxiv的时间为2013年12月,至20190921引用量为2871(google scholar)。 NIN的网络结构仍是在AlexNet基础上修改而来,其主要创新点如下: 提出了 mlpconv layer :mlpconv layer中使用小的多层全连接神经网络(multilayer perceptron, MLP)“micro network”替换掉卷积操作, micro network的权重被该层输入feature map的所有local patch共享 。卷积操作可以看成线性变换,而micro network可以拟合更复杂的变换, 相当于增强了conv layer的能力 。多个mlpconv layer堆叠构成整个网络,这也是Network in Network名称的由来。 提出了 global average pooling(GAP) : NIN不再使用全连接层 ,最后一层mlpconv layer输出的feature map数与类别数相同,GAP对每个feature map求全图均值

咕咕咕-HLPP算法

风流意气都作罢 提交于 2019-11-30 20:00:30
hlpp(欢乐婆婆)算法总结 突然发现咕了好久(X)   emm先大概说一下,hlpp是针对网络流算法的一种复杂度更优的算法,基于预流推进(即模拟) 复杂度上界为 n 2 根号m 且跑不满 (所以学会了它,可以解决绝大部分dinic能解决的问题,以及绝大部分dinic不能解决的问题 先把以前的dinic算法放一下吧 你谷P3376 网络最大流模板 #include<bits/stdc++.h> #define re register using namespace std; const int maxxx=(1ll<<31)-1; inline int read() { register int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar();} while(ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x*f; } struct node { int to,nxt,dis; }e[210000]; int head[100010],cur[100010],cnt=-1; void add(int u,int v,int w) { e[++cnt].to=v; e[cnt].dis=w; e[cnt]

Mysql死锁如何排查:insert on duplicate死锁一次排查分析过程

元气小坏坏 提交于 2019-11-29 05:40:11
前言 遇到Mysql死锁问题,我们应该怎么排查分析呢?之前线上出现一个insert on duplicate死锁问题,本文将基于这个死锁问题,分享排查分析过程,希望对大家有帮助。 死锁案发还原 表结构: CREATE TABLE `song_rank` ( `id` int(11) NOT NULL AUTO_INCREMENT, `songId` int(11) NOT NULL, `weight` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `songId_idx` (`songId`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 隔离级别: mysql> select @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in set, 1 warning (0.00 sec) 数据库版本: +------------+ | @@version | +------------+ | 5.7.21-log | +------------+ 1 row in

Java中的七大排序_2 希尔排序

女生的网名这么多〃 提交于 2019-11-29 01:54:28
希尔排序 简单点说: 将元素进行分组,每组在进行组内的插入排序,在重新分组、排序。直到最后全部元素归为一组,做最后一次插入排序 注意: 将待排元素分为gap组(gap=gap/3+1),开始gap=array.length。每一组元素也不是位置连续的, 而是把每组中的第一个元素连续放在一起,够gap个后在放每一组的第二个元素。 1.第一组:无序区间第一个数key=array[4]=2 2.第二组:无序区间第一个数key=array[5]=4 3.第三组:无序区间第一数key=array[6]=1 4.第四组:无序区间第一个数key=array[7]=5 5.再接着从第一组的无序区间的第二个元素key=array[8]=2开始 直到key第一轮走完全程,第一轮结束的结果 在会分新的组,gap=gap/3+1=4/3+1=2.分为两组 6.重新分为两组后 再重复以上比较移动交换的操作,完成第二次每组的排序 8.走到最后再分组gap=2/3+1=1组 最终比较完成后结果: 代码实现 //希尔排序 public static void shellSort(int[] array) { int gap = array.length;//分组的个数 while (true) { gap = gap / 3 + 1; insertSortWithGap(array, gap);//分组的插入排序