希尔排序及代码实现

来源:互联网 发布:足球滚球软件 编辑:程序博客网 时间: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];                }                            }        }    }}

 

 

原创粉丝点击