各種排序算法的實現-4(表插入排序-1)

   現在介紹一下表插入排序。 這種排序算法和直接插入排序很像,

每一個節點都存在一個 next域 來指示 這個節點的下一個節點, 和鏈表有點像, 

  在插入的過程當中就保證當前已經根據他們的next指向的位置 而鏈成了一個有序的列表,然後第二步  再幫這個表按照順序整理爲一個 新的 按照大小順序 而排列的表。

    首先演示一下插入的過程, 下面是具體的實驗代碼:

  

#define SIZE 8

typedef struct
{
   int data;
   int next;
}s_node;

typedef struct
{
	s_node r[SIZE + 1];
}list_type;

void TB_sort(list_type & list)
{
	list.r[0].next = 1;
	list.r[1].next = 0;	//初始狀態

	int p, q;
	for (int i = 2; i <= SIZE; i++)
	{
		p = list.r[0].next;
		q = 0;
		while (p > 0 && list.r[p].data <= list.r[i].data)
		{
			q = p;
			p = list.r[p].next;
		}
		list.r[q].next = i;
		list.r[i].next = p;
	}
}

int main(int argc, char* argv[])
{
	s_node  node[SIZE + 1];
	node[0].data = 0;//這個節點用作哨兵節點

	node[1].data = 23;
	node[2].data = 324;
	node[3].data = 23;
	node[4].data = 333;
	node[5].data = 98;
	node[6].data = -1;
	node[7].data = 45;
	node[8].data = -345;

	list_type list;
	memcpy(list.r, node, sizeof(s_node) * (SIZE + 1));
	TB_sort(list);
	
	int   temp = list.r[0].next;

	for (int i = 1; i<=SIZE; i++ )
	{
		printf("%d ", list.r[temp].data);
		temp = list.r[temp].next;
	}
	system("pause");
	return 0;
}
  上面這段代碼完成了直接插入的過程,讓這個表變得有序。下面一節  再去記錄 整理爲又小到大的排列過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章