using System;
using System.Collections.Generic;
using System.Text;
namespace SoloDataStructure
{
class MyShellSort
{
/// <summary>
/// 希尔排序
/// </summary>
/// <param name="arr">需要排序的数列</param>
static void ShellSort (int[] arr)
{
int temp; //
int n = arr.Length;
int gap = n / 2; //初始步长
while (gap != 0)
{
for (int i = gap; i < arr.Length; i++)
{
int j;
temp=arr[i];
for (j = i; j >= gap; j = j - gap) //同子序列的插入排序
{
if (temp < arr[j - gap])
arr[j] = arr[j - gap]; //如果后面的小于前面的,交换位置
else
break;
}
arr[j] = temp; //插入
}
gap /= 2; //缩短步长
}
}
static void Main(string[] args)
{
int[] arr = new int[] { 99,198,97,96,905,44,93,2,91};
Console.Write("希尔排序前:");
for (int i = 0; i < arr.Length; i++)
Console.Write(arr[i] + ".");
ShellSort(arr);
Console.Write("\n希尔排序后:");
for (int i = 0; i < arr.Length; i++)
Console.Write(arr[i]+".");
Console.ReadLine();
}
}
}
using System.Collections.Generic;
using System.Text;
namespace SoloDataStructure
{
class MyShellSort
{
/// <summary>
/// 希尔排序
/// </summary>
/// <param name="arr">需要排序的数列</param>
static void ShellSort (int[] arr)
{
int temp; //
int n = arr.Length;
int gap = n / 2; //初始步长
while (gap != 0)
{
for (int i = gap; i < arr.Length; i++)
{
int j;
temp=arr[i];
for (j = i; j >= gap; j = j - gap) //同子序列的插入排序
{
if (temp < arr[j - gap])
arr[j] = arr[j - gap]; //如果后面的小于前面的,交换位置
else
break;
}
arr[j] = temp; //插入
}
gap /= 2; //缩短步长
}
}
static void Main(string[] args)
{
int[] arr = new int[] { 99,198,97,96,905,44,93,2,91};
Console.Write("希尔排序前:");
for (int i = 0; i < arr.Length; i++)
Console.Write(arr[i] + ".");
ShellSort(arr);
Console.Write("\n希尔排序后:");
for (int i = 0; i < arr.Length; i++)
Console.Write(arr[i]+".");
Console.ReadLine();
}
}
}