zoukankan      html  css  js  c++  java
  • C#算法基础之希尔排序

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 
      7 namespace ConsolePractice
      8 {
      9     class CArray
     10     {
     11         private int[] arr;
     12         //数组大小
     13         private int upper;
     14         //下标
     15         private int numElements;
     16 
     17         /// <summary>
     18         /// 初始化数组参数
     19         /// </summary>
     20         /// <param name="size"></param>
     21         public CArray(int size)
     22         {
     23             arr = new int[size];
     24             upper = size - 1;
     25             numElements = 0;
     26         }
     27 
     28         /// <summary>
     29         /// 插入方法
     30         /// </summary>
     31         /// <param name="item">存储的数</param>
     32         public void Insert(int item)
     33         {
     34             arr[numElements] = item;
     35             numElements++;
     36         }
     37 
     38         /// <summary>
     39         /// 输出方法
     40         /// </summary>
     41         public void DisplayElements()
     42         {
     43             for (int i = 0; i <= upper; i++)
     44             {
     45                 Console.Write(arr[i] + " ");
     46             }
     47             Console.WriteLine();
     48         }
     49 
     50         /// <summary>
     51         /// 清除数组
     52         /// </summary>
     53         public void Clear()
     54         {
     55             for (int i = 0; i <= upper; i++)
     56             {
     57                 arr[i] = 0;
     58             }
     59             numElements = 0;
     60         }
     61 
     62         /*
     63          * 希尔排序其实就是插入排序的改进,可以按任意数量自增
     64          */
     65         /// <summary>
     66         /// 希尔排序算法
     67         /// </summary>
     68         public void ShellSort()
     69         {
     70             int inner, temp;
     71             //每次按3自增
     72             int h = 3;
     73             while (h > 0)
     74             {
     75                 for (int outer = h; outer <= upper; outer++)
     76                 {
     77                     temp = arr[outer];
     78                     inner = outer;
     79                     //把一个元素取出来逐个跟之前h距离的元素比较。
     80                     //若该元素较小则较大的元素往右移。
     81                     //若该元素较大则结束循环。
     82                     while (inner > h-1 && arr[inner - h] >= temp)
     83                     {
     84                         arr[inner] = arr[inner - h];
     85                         inner -= h;
     86                     }
     87                     arr[inner] = temp;
     88                     this.DisplayElements();
     89                 }
     90                 //h--;
     91                 h = (h - 1) % h;
     92                 Console.WriteLine("h=" + h);
     93             }
     94         }
     95     }
     96 
     97     class C_shape
     98     {
     99         static void Main()
    100         {
    101             CArray nums = new CArray(10);
    102             Random rnd = new Random(100);
    103             for (int i = 0; i < 10; i++)
    104             {
    105                 nums.Insert(rnd.Next(0, 100));
    106             }
    107             Console.WriteLine("Before sorting:");
    108             nums.DisplayElements();
    109             Console.WriteLine("During sorting:");
    110             nums.ShellSort();
    111             Console.WriteLine("After sorting:");
    112             nums.DisplayElements();
    113             Console.ReadKey();
    114         }
    115     }
    116 }

    运行结果:

  • 相关阅读:
    Hash表解题之大数据查找
    数据结构与算法之字典树解题
    oracle存储过程学习
    mq常见问题
    通过反射构造对象
    平衡二叉树
    LinkList源码
    ArrayList源码
    JVM参数调优
    MyBatis源码图
  • 原文地址:https://www.cnblogs.com/zt102545/p/3454726.html
Copyright © 2011-2022 走看看