TableInsertSort.c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
typedef struct//data struction
{
int data;
int next;
}Node, *NodePtr;
static NodePtr nodePtr = NULL;
static int *iArrayTemp = NULL;
static int iArrayLen;
void alloc()
{
if((nodePtr = (NodePtr) malloc(iArrayLen * sizeof(Node))) == NULL)
{
fprintf(stderr, "allocate error !");
exit(1);
}
}
void init()
{
int i;
nodePtr[0].data = INT_MAX;
nodePtr[0].next = 1;
nodePtr[1].data = iArrayTemp[0];
nodePtr[1].next = 0;
//printf("%d,", nodePtr[1].data);
for(i = 2; i < iArrayLen + 1; i++)
{
nodePtr[i].data = iArrayTemp[i - 1];
//printf("%d,", nodePtr[i].data);
}
//printf("\n");
}
void TabInsertSort(int iList[], int iLen)
{
int i;
int iCurrentPtr;
int iForePtr;
int iFlag = 0;
iArrayTemp = iList;
iArrayLen = iLen;
alloc();//allocate space
init();
for(i = 2; i < iArrayLen + 1; i++)//start from the second one
{
iCurrentPtr = nodePtr[0].next;//pointer point to the first
iForePtr = 0;
while(1)
{
//printf("nodePtr[%d].data:%d : ", iCurrentPtr, nodePtr[iCurrentPtr].data);
//printf("nodePtr[%d].data:%d\n", i, nodePtr[i].data);
if(nodePtr[iCurrentPtr].data > nodePtr[i].data)
{
nodePtr[i].next = iCurrentPtr;
nodePtr[iForePtr].next = i;
if(iFlag == 1)
{
break;
}
else
{
nodePtr[0].next = i;
iFlag = 0;
break;
}
}
else if(nodePtr[iCurrentPtr].data < nodePtr[i].data)
{
iFlag = 1;
if(nodePtr[iCurrentPtr].next != 0)
{
iCurrentPtr = nodePtr[iCurrentPtr].next;//change iCurrentPtr for moving the next one
iForePtr = nodePtr[iForePtr].next;
}
else
{
nodePtr[i].next = 0;
nodePtr[iCurrentPtr].next = i;
break;
}
}
}
}
iCurrentPtr = nodePtr[0].next;
for(i = 0; i < iArrayLen; i++)
{
iList[i] = nodePtr[iCurrentPtr].data;
iCurrentPtr = nodePtr[iCurrentPtr].next;
}
}main.c
#include <stdio.h>
int iList[] = {34, 23, 4, 87, 11, 12, 15, 43, 92};
int main(void)
{
void TabInsertSort(int iList[], int iLen);
int iLen = sizeof(iList) / sizeof(iList[0]);
int i;
TabInsertSort(iList, iLen);
//printf("iLen = %d\n", iLen);
for(i = 0; i < iLen; i++)
{
printf(i == iLen - 1 ? "%d\n" : "%d,", iList[i]);
}
return 0;
}
本文介绍了一种使用表格插入法实现的排序算法,并提供了完整的C语言源代码。该算法通过构建节点链表的方式进行排序,适用于计算机科学领域的学习与研究。
2435

被折叠的 条评论
为什么被折叠?



