表插入排序

来源:互联网 发布:淘宝无线端店铺活动 编辑:程序博客网 时间:2024/05/29 15:36

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 spaceinit();for(i = 2; i < iArrayLen + 1; i++)//start from the second one {iCurrentPtr = nodePtr[0].next;//pointer point to the firstiForePtr = 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 oneiForePtr = 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;}



原创粉丝点击