希尔排序及代码实现
来源:互联网 发布:足球滚球软件 编辑:程序博客网 时间:2024/05/27 21:09
前言:
最近在学习排序,学习到希尔排序的时候对代码有一些感触,首先讲一下希尔排序是怎么个排序过程,然后在把我能够实现的从网上荡来的代码贴一下,然而这不是完了,我和组长大人在讨论一番后,发现这个荡来的代码是有些小问题的,所以把问题也写一下。
排序过程:
待排序数组:48, 37 ,64, 96, 75, 12, 26, 48, 54, 03
步骤一:选一个小于n(就是你的数组长度)的数字(比如选5),然后按照这个数来分组,即第一个和隔5个数之后的数字分为一组。在这个例子里:48和隔个5个数的12为一组,因为12后面不够5个数了,所以这个分组就到这了。
分组情况:
步骤二:将第一开始的分组的数字以直接插入的方式,按照从小到大的排序(也可以按照从大到小来)
12,26,45,54,03,48,37,64,98,75
步骤三:由于第二部进行了排序,在这个基础上,再一次选一个小于d1的数字,d2,以这个数字分组,这次以d2=3举例
因此,第二次的分组情况如下:
步骤四:将刚刚分完组的数字,进行组内排序,还是以直接插入排序,所以排序之后结果是下面的情况:
12,03,45,37,26,48,54,64,75
步骤五:这次还要选一个数字d3作为分组的标准,第一,二两次分别用的5,3,这次用d3=1。也就是说这次可以直接整体用直接插入排序了。
步骤六:直接插入排序结果为:03,12,26,37,45,48,54,64,75
感想:这个排序很好理解的,我一步一步的说的也很明白(自认为),下面贴出来代码,凑合着实现一下吧。
namespace 希尔排序{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int i; int temp = 0; int[] Array = { 48, 37, 64, 96, 75, 12, 26, 33, 54, 03 }; for (int gap = Array.Length / 3; gap > 0; gap--)//第一重循环,按照gap的大小进行分组 { for (i = 0; i < gap; i++)//第二重循环,对所有分组进行排序 { for (int j = i; j < Array.Length; j = j + gap)//第三重循环,组内进行直接插入排序 { temp = Array[j]; int index = j - gap; while (index >= 0 && Array[index] > temp) { Array[index + gap] = Array[index]; index = index - gap; } Array[index + gap] = temp; } } label2.Text = label2.Text + "\r\n" + "第" + i + "次结果"; for (int k = 0;k <Array .Length ;k ++) { label2.Text = label2.Text + " " + Array[k]; } } } }}
- 希尔排序及代码实现
- 希尔排序及代码实现
- 希尔排序代码实现
- Java代码实现希尔排序
- java希尔排序代码实现
- 希尔排序 原理及实现
- 希尔排序及Java实现
- C++实现的一段希尔排序代码
- 希尔排序的c语言实现代码
- 快速排序、归并排序、大顶堆排序、希尔排序代码实现
- 希尔排序及C语言实现
- 希尔排序算法原理及JAVA实现
- 希尔排序及C语言实现
- 希尔排序算法原理及JAVA实现
- 希尔排序算法思想及实现过程
- 希尔排序原理及Java实现
- 希尔排序 原理及java实现
- 希尔排序(解析及代码实现 结合冒泡,选择,二分插入)
- POJ 3264 Balanced Lineup
- 三、5(3)
- wr720n v4 折腾笔记(一):安装Openwrt
- JavaSwing_4.10: JInternalFrame(内部窗口)
- 判断两个链表是否相交
- 希尔排序及代码实现
- 使用虚拟机实现lvs nat模式负载均衡
- 求旋转数组中的最小值
- Overlapping Rectangles(线段树,矩形面积并)
- 多线程的三种实现方式及比较
- 嵌入式硬件系统相关知识学习笔记
- 动态规划(0-1背包问题)---C#版
- [LeetCode][105,106] Construct Binary Tree from Inorder and (Post/Pre)order Traversal
- jq代码学习2——《锋利的JQUERY》 dom对象和jQ对象转换