C#使用希尔排序法对一维数组进行排序

效果图:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int[] j = new int[10];
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            Random r = new Random();
            for (int i = 0; i < 10; i++)
            {
                int sum = r.Next(0, 100);
                j[i] = sum;
                textBox1.Text += sum.ToString() + ",";
            }
        }


        private void button2_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != null)
            {
                int inc;                                                            //定义一个int便令,用来确定每个有序序列的个数
                for (inc = 1; inc <= j.Length / 9; inc = inc * 3 + 1)               //为有序序列赋值
                {
                    for (int i = inc + 1; i <= j.Length; i += inc)
                    {
                        int t = j[i - 1];                                             //记录当前值
                        int k = i;                                                    //定义下一个索引
                        while ((k > inc) && (j[k - inc - 1] > t))
                        {
                            j[k - 1] = j[k - inc - 1];                                  //交换数据
                            k -= inc;
                        }
                        j[k - 1] = t;                                                    //将下一个元素值设置为当前值
                    }
                }
                textBox2.Clear();
                foreach (int i in j)
                {
                    textBox2.Text += i.ToString() + ",";                                   //向空间内添加字符串
                }
            }
            else
            {
                MessageBox.Show("首先应当生成数组,然后进行排序");
            }
        }
    }
}

希尔排序法(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法。

算法思想简单描述
在直接插入 排序算法中,每次插入一个数,使有序序列只增加1个节点, 并且对插入下一个数没有提供任何帮助。如果比较相隔较远距离(称为
增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除 多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现
了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中 记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量
对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成 一组,排序完成。 下面的函数是一个 希尔排序算法 的一个实现,初次取 序列的一半为增量, 以后每次减半,直到增量为1。
希尔排序是不稳定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值