希尔排序问题,求帮忙解答

问题描述

希尔排序问题,求帮忙解答
#include

#define NUM 15
void shellsort(int [] int);

int main()
{
int i = 0;

int v[NUM] = {314528679121523211510};shellsort(vNUM);for(i = 0; i < NUM; i++)    printf(""%d
""v[i]);return 0;

}
//希尔排序
void shellsort(int v[] int n)
{
int gap; //元素距离
int i j temp = 0;

for(gap = n/2;gap > 0; gap /= 2)//控制两个被比较元素的距离,从n/2开始,逐步进行对折,知道距离为0    for(i = gap; i < n; i++)    //用于在元素间移动位置      for(j = i - gap; j >=0 && v[j] > v[j+gap]; j -= gap) //比较各对相距gap个位置的元素,逆序时交换        {            temp = v[j+gap];            v[j+gap] = v[j];            v[j] = temp;        }

}

问题在于,我不明白原书中,第三个嵌套for中,j-=gap是用来干嘛的?,为什么要这么做?我是新手,希望大家帮帮忙

解决方案

希尔排序是对每组记录采用直接插入排序方法进行排序
当你第一趟的时候,gap=7等于是分了7个组进行比较,最后一组只有一个元素
第二趟的时候,gap=3等于是分成3个组比较第一组是下标为036912第二组是(1471013)第三组是(2581114)
第三趟的时候gap=1只剩一组了
因为每趟比较都是分组比较的,而当前这趟同一组里的元素下标相距gap的长度,所以需要j-=gap
看看这个,有图方便理解一点:http://www.cnblogs.com/jingmoxukong/p/4303279.html

解决方案二:
TSP问题,求帮忙。
求大虾帮忙解答个C语言编程
没解决的问题,如果你看到了请帮忙解答下好吗?

解决方案三:
对不起,注释代码中数组下标全部改成j+gap

时间: 2024-10-29 00:57:50

希尔排序问题,求帮忙解答的相关文章

java-新人刚学Java,有个很纠结的点求帮忙解答

问题描述 新人刚学Java,有个很纠结的点求帮忙解答 JAVA 在定义一个类时候,在他的内部定义main方法, package com.pc; public class Person { private String name; private String job; private int age; public Person(String name, String job, int age){ this.name = name; this.job = job; this.age = age;

java基础-Java基础一个问题,求帮忙解答

问题描述 Java基础一个问题,求帮忙解答 有一个java类 public final class Test{ private long position = -1; public void method(){ position++; } } 当系统中A访问Test method后,position值为多少,B再访问Test method后,position值为多少? 为什么,求帮忙解答? 解决方案 访问之后,position的值始终为0,这是一个final类,每次进去访问时,position的

关于继承的问题,求帮忙解答下,谢谢

问题描述 关于继承的问题,求帮忙解答下,谢谢 public class Demo { public static void main(String[] args){ new B(); } } class A { void aFunction(){ System.out.println("AFunction"); } A(){ System.out.println("A"); aFunction(); System.out.println("after A&

html-引网上的jquery库跟jquery mobile库都可以,本地却不行了。求帮忙解答

问题描述 引网上的jquery库跟jquery mobile库都可以,本地却不行了.求帮忙解答 这是引本地的.这个html跟hellojs文件夹在同一个目录. juqery文件跟jquery mobile文件都在hellojs文件里面. 这是引网上的,这样可以有效果. 解决方案 页面F12控制台看看有没有错误信息 如果没有,改成先引jquery再引jquery mobile

open-ssh 连接报错,求帮忙解答一下 。谢谢

问题描述 ssh 连接报错,求帮忙解答一下 .谢谢 org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Listener refused the connection with the following

ligertree 求大神-ligertree 求大神帮忙解答

问题描述 ligertree 求大神帮忙解答 怎样让ligertree子节点如图片中一样只在点击黑框部分时才可有反应? 解决方案 {求大神帮忙!!!!!!} 解决方案二: 那你要改源代码了,他那个直接点击li容器也会增加选中样式 修改ligeruiV1.2.5SourcelibligerUIjsplugins里面的ligerTree.js, g.tree.click(function (e)这个事件里面,大概在1083这行增加一句判断是点击了文字才执行添加选中样式 if (!$(obj).has

dao-java继承问题,求大神帮忙解答

问题描述 java继承问题,求大神帮忙解答 service.impl里面是这么写的 public class ServiceImpl implements Service{ private Dao dao; public String getDao(){ return dao.getDao(); } } 下面是dao的代码 public interface Dao { public String getDao(); } 下面是dao.impl代码 public class DaoImpl imp

c++-求大神帮忙解答一下,谢谢

问题描述 求大神帮忙解答一下,谢谢 给定一组询问(l,r),若整数a,b同时满足以下三个条件: (1) b = a + 1 (2) a + b的值是一个素数 (3) l <= a, b <= r 我们就称a, b是一个符合条件的数对. 求出有多少符合条件的数对. [输入格式] 仅一行,2个整数l,r. [输出格式] 一行,一个整数ans,表示符合条件的数对的数量. [输入样例] 0 13 [输出样例] 8 [数据范围] 0 <= l, r <= 500 解决方案 我的思路就是用i对

java web问题 求大神帮忙解答啊

问题描述 java web问题 求大神帮忙解答啊 如何实现你发表一个日志,让你自己和你的上级领导还有你的部门领导可以看到. 解决方案 如果你只是做一个学生习作,简单的做法是,你需要一个组织表 id userid superid,分别是当前用户id和上一级用户id 当某个用户看日志的时候,先通过递归上面的表,找到所有的自己下属的id,然后作为条件查询他们发的日志. 解决方案二: 设置权限啊 解决方案三: 日志信息入库,如果领导用户登录,就查询日志显示. 解决方案四: 根据登陆的ID设置展示权限