【经典回放】多种语言系列数据结构算法:希尔排序(C/C#版)

        原理:每隔sp(整数)个数即取数并判断大小,交换,先构造局部有序序列,直到sp1,构造完整的有序序列。

        给出一组数据,如下:

 

0

1

2

3

4

5

6

7

8

9

49

38

65

97

76

13

27

49

55

4

        对这个数据,将sp设为5,即先取49,与13比较,进行交换;再取38,与27对比,进行交换,以此内推。终止条件是764对比完。至此,我们可以写出如下希尔函数的核心部分:

for(i=0;i<n-sp;i++)

       for(j=i;j<n-sp;j+=sp)

              if(a[j]>a[j+sp])

              {

                     t=a[j];a[j]=a[j+sp];a[j+sp]=t;

              }

    当然,这仅仅是走完了排序的第一趟!要完成真正的排序,还要进行循环!

一、C语言版

1、希尔函数

void ssort(int a[],int n,int sp) //n为数据大小,sp为间隔

{

       int i,j,t;

       for(i=0;i<n-sp;i++)

       for(j=i;j<n-sp;j+=sp)

              if(a[j]>a[j+sp])//如果前面你的大于后面的,则进行交换

              {

                     t=a[j];a[j]=a[j+sp];a[j+sp]=t;

              }

}

        我们知道,希尔排序一趟是排不出最终结果的,sp要从大到小,最后取到1才能完成,于是在主调函数里要调用多次ssort函数(如下面main函数里的标红部分),于是我们将多个sp综合到一个数组里,再将这个数组套入循环,即可得到一个新的函数,这样在主函数里就可以直接调用该函数了,如下:

void shellsort(int a[],int n,int d[],int dn) //dnsp的个数

{

       int i;

       for(i=0;i<dn;i++)

              ssort(a,n,d[i]);

}

2main函数

main()

{

       inta[10]={49,38,65,97,76,13,27,49,55,4},j;

       int d[]={5,3,1};

       //ssort(a,10,5);

       //ssort(a,10,3);

       //ssort(a,10,1);

       shellsort(a,10,d,3);//一次调用多个循环

       for(j=0;j<10;j++)

              printf("%d  ",a[j]); //打印最后排序结果

       printf("%d\n");

}

3. 结果显示

二、C#版

1. 构造算法类

 

class XiEr
{public void ssort(int[] a, int n, int sp){int i, j, t;for (i = 0; i < n - sp; i++)for (j = i; j < n - sp; j += sp)if (a[j] > a[j + sp]){t = a[j]; a[j] = a[j + sp]; a[j + sp] = t;}}public void shellsort(int[] a, int n, int[] d, int dn){int i;for (i = 0; i < dn; i++)ssort(a, n, d[i]);}
}

2. 前端调用

 

 

private void button1_Click(object sender, EventArgs e){int j;int[] a = { 49, 38, 100, 97, 76, 13, 27, 49, 55, 4 };int[] d = { 5, 3, 1 };XiEr xier = new XiEr();xier.shellsort(a, 10, d, 3);listBox1.Items.Clear();string tt = "";for (j = 0; j < 10; j++)tt = tt + a[j].ToString() + '\t';listBox1.Items.Add(tt);}

3. 结果显示

 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

extjs 文件加载、解析流程

extjs版本&#xff1a;4.2.1在html中添加应用的启动脚本&#xff0c;如下&#xff1a;<script src"app.js"></script>2. 用户访问html的时候&#xff0c;会去加载app.js文件&#xff0c;app中定义了应用的名字&#xff0c;根路径等信息&#xff0c;并且调…

【131天】尚学堂高淇Java300集视频精华笔记(65-66)

第65集&#xff1a;常用类Date类的使用JDk源码分析 Date时间类&#xff08;java.util.Date&#xff09; 在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间&#xff0c;精确到毫秒。 Date()分配一个Date对象&#xff0c;并初始化此对象为当前的日期和时间精确到毫秒…

ArcGIS 10.2加载在线影像底图

两种方法&#xff1a; 一、File→ArcGIS Online→影像图→Open。 二、 效果&#xff1a;

分治算法之二分搜索

1、问题 一天晚上,我们在家里看电视,某大型娱乐节目在玩猜数游戏。主持人在女嘉宾的手心上写一个 10 以内的整数,让女嘉宾的老公猜是多少,而女嘉宾只能提示大了,还是小了,并且只有 3 次机会。主持人悄悄地在美女手心写了一个 8。老公:“2。”老婆:“小了。”老公:“3…

都说不要装箱,那装箱到底带来了什么开销?

相信很有朋友在面试时大多会被问到 装箱 的问题&#xff0c;也是一个经典的问题&#xff0c;可深可浅&#xff0c;那今天我们就从 汇编 和 内存 角度进行统一解读下。为了方便演示&#xff0c;先上一段装箱的代码。class Program{static void Main(string[] args){var i 10;va…

Java中方法的继承以及父类未被子类覆盖的方法调用的问题

在看java继承这一块的时候发现了一个问题&#xff0c;即父类未被子类覆盖的方法是如何调用的&#xff1f; 是子类拥有了父类的该方法只是没有显示表示&#xff0c;还是子类调用了父类的该方法。 为此做了一下验证 代码如下&#xff1a; public class One {protected void print…

数据结构实验之栈四:括号匹配

数据结构实验之栈四&#xff1a;括号匹配 Description 给你一串字符&#xff0c;不超过50个字符&#xff0c;可能包括括号、数字、字母、标点符号、空格&#xff0c;你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。Input 输入数据有多组&#xff0c;处理到文件结束。Outpu…

10.29 工作笔记 ndk编译C++,提示找不到头文件(ndk-build error: string: No such file or directory)...

ndk编译C。提示找不到头文件&#xff08;ndk-build error: string: No such file or directory&#xff09; 被这个问题弄得愁眉苦脸啊。心想为啥一个string都找不到呢。。于是百度到了。。。遇到这个问题&#xff0c;就在所在的文件夹 Application.mk 文件里。加入&…

Excel VBA编程基础

一、程序基本调试方法 1、VB程序的三种状态:设计时、运行时和中断模式。 2、但不执行代码,快捷键为F8。 3、中断程序的方法: (1)使用断点 (2)使用Debug.Assert (3)使用监视条件 二、Excel Shape对象

分治算法之合并排序

1、问题 合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列 2、思路 1、分解:将待排序元素分成大小大致相同的两个子序列 2、治理:对两个子序列进行合并排序 3、…

WPF 实现截屏控件之移动(二)(仿微信)

WPF开发者QQ群此群已满340500857 &#xff0c;请加新群458041663由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 接着上一篇&#xff0c;兼容屏幕缩放问题。01—代码如下一、创建ScreenCut.xaml代码如下。<ResourceDictiona…

构造不可变类及其优点

不可变类的优点 易于构造&#xff0c;测试和使用天然线程安全&#xff0c;没有同步问题不需要实现clone方法引用不可变类的实例时&#xff0c;不需要考虑实例的值发生变化的情况如何构造不可变类 不声明“setter”方法。所有属性设为private final。class声明为final&#xff0…

深入剖析阿里云推荐引擎——新架构,新体验

摘要&#xff1a;本文的整理自2017云栖大会-上海峰会上阿里云算法专家郑重&#xff08;卢梭&#xff09;的分享讲义&#xff0c;从2016年2月V2.0公开使用到现在&#xff0c;阿里云推荐引擎有了更大的进步。有着获取排序的在线计算&#xff0c;修正匹配的近线计算及匹配排序的离…

分治算法之快速排序

1、快速排序 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序 2、思路 ( 1 )分解:先从数列中取出一个元素作为基准元素。以基准元素为标准,将问题分解为两个子序列,使小于…

java程序结构_java程序结构

java是一门面向对象的语言&#xff0c;在编程过程中当然离不开对象的声明&#xff0c;而对象又是通过类定义的&#xff0c;所以java中最重要的就是各式各样的类&#xff0c;在java中&#xff0c;类也是一个程序的基本单位0x01&#xff1a;默认生成类在eclipse中创建好一个java类…

C#金额小写转大写

public string ConvertMoney(decimal Money){//金额转换程序string MoneyNum = "";//记录小写金额字符串[输入参数]string MoneyStr = "";//记录大写金额字符串[输出参数]string BNumStr = "零壹贰叁肆伍陆柒捌玖";//模string UnitStr = "万…

SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

SQL Server 2008空间数据应用系列三&#xff1a;SQL Server 2008空间数据类型 原文:SQL Server 2008空间数据应用系列三&#xff1a;SQL Server 2008空间数据类型友情提示&#xff0c;您阅读本篇博文的先决条件如下&#xff1a; 1、本文示例基于Microsoft SQL Server 2008 R2调…

shell脚本中怎样同时执行多个.sql文件,并把结果写入文件中(转)

转载&#xff1a;http://joewalker.iteye.com/blog/408879命令行下具体用法如下&#xff1a; mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名;导出整个数据库结构和数据mysqldump -h localhost -uroot -p123456 database > dump.sql导出单个数据表结构和数据mysql…

.NET 很好,你可能对它有一些误解

> 作者&#xff1a;Charles Chen在 20 年前的 2002 年, 微软公布了下一代的软件、服务的愿景和路线&#xff0c;2 月 13 日&#xff0c;Visual Studio .NET 推出&#xff0c;.NET 开发平台的第一个版本正式向世界发布。到现在为止&#xff0c;.NET 都已经 20 岁了, 它已经成…

ajax返回数据类型为JSON数据的处理

ajax返回数据类型为JSON数据的处理 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <…