博客中代码都经过运行并且没有bug
/// <summary>
/// 构造数组结构
/// </summary>
/// <returns></returns>
private static int[][] InitList()
{
int[][] list = new int[9][];
//数组中的list[0][0]位置记录的是数组中元素的个数,不是key
list[0] = new int[2];
list[0][0] = 8;
list[0][1] = 1;
list[1] = new int[2];
list[1][0] = 20;
list[1][1] = 0;
list[2] = new int[2];
list[2][0] = 12;
list[2][1] = -1;
list[3] = new int[2];
list[3][0] = 8;
list[3][1] = -1;
list[4] = new int[2];
list[4][0] = 19;
list[4][1] = -1;
list[5] = new int[2];
list[5][0] = 33;
list[5][1] = -1;
list[6] = new int[2];
list[6][0] = 1;
list[6][1] = -1;
list[7] = new int[2];
list[7][0] = 7;
list[7][1] = -1;
list[8] = new int[2];
list[8][0] = 6;
list[8][1] = -1;
return list;
}
/// <summary>
/// 显示数组序列
/// </summary>
/// <param name="list"></param>
private static void ShowList(int[][] list)
{
for (int i = 0; i < list.Length; i++)
{
Console.WriteLine("list{0}的key为:{1},next为{2}" ,i,list[i][0],list[i][1]);
}
}
/// <summary>
/// 表插入排序
/// </summary>
private static int[][] LInsertionSort(int[][] list, int listLength)
{
for (int i = 2; i <= listLength; i++)
{
int j = 0, k = 0;
for (j = 0, k = list[0][1]; list[k][0] <= list[i][0]; j = k, k = list[k][1])
{
if (k == 0)
break;
}
list[j][1] = i;
list[i][1] = k;
}
return list;
}
/// <summary>
/// 对已经作了类似链表排序效果的list数组进行数组位置上的调整
/// </summary>
/// <param name="list"></param>
/// <param name="listLength"></param>
/// <returns></returns>
private static int[][] Arrange(int[][] list, int listLength)
{
int p = list[0][1];//p指示第一个记录的当前位置
for (int i = 1; i < listLength; i++)
{
while (p < i)
{
p = list[p][1];
}
int q = list[p][1];//q指示尚未调整的表尾
if (p != i)
{
//交换记录,使第i个记录到位
int[] temp = new int[2];
temp[0] = list[p][0];
temp[1] = list[p][1];
list[p][0] = list[i][0];
list[p][1] = list[i][1];
list[i][0] = temp[0];
list[i][1] = temp[1];
list[i][1] = p;
}
p = q;//p指向下一个应该调整位置的元素
}
return list;
}
static void Main(string[] args)
{
int[][] list = InitList();
list = LInsertionSort(list, list.Length - 1);
list = Arrange(list, list.Length - 1);
ShowList(list);
Console.ReadKey();
}
表插入排序时间复杂度是T(n)=O(n^2)