表排序参考 链接,用来了解算法的运行过程
下面是根据链接改动了一下代码。
#include"stdio.h"
typedef struct tbl
{
int data;
int nextInd;
}Table;
void TableInsertSort( Table arr[], int length );
int main()
{
int i;
int a[] = { 49,38,65,97,76,13,27,49 };
Table arr[9];
int length = 8;
for( i = 1; i <= length; i++ )
{
arr[i].data = a[i-1];
arr[i].nextInd = 0;
}
arr[0].data = 0;
TableInsertSort( arr, length );
printf( "index :" );
for( i = 0; i <= length; i++ )
{
printf( "%5d", i );
}
printf( "\n" );
printf( "data :" );
for( i = 0; i <= length; i++ )
{
printf( "%5d", arr[i].data );
}
printf( "\n" );
printf( "nextInd:" );
for( i = 0; i <= length; i++ )
{
printf( "%5d", arr[i].nextInd );
}
printf( "\n" );
return 0;
}
void TableInsertSort( Table arr[], int length )
{
int i, k ,loc;
arr[0].nextInd = 1;
arr[1].nextInd = 0;
for( i = 2; i <= length; i++ )
{
k = arr[0].nextInd;
bool m=true;
while( 1 )
{
if( arr[i].data < arr[ k ].data)
{
if(m) //最前面插入
{
arr[i].nextInd=arr[0].nextInd;
arr[0].nextInd=i;
break;
}
arr[i].nextInd=k;
arr[loc].nextInd=i;
break;
}
else
{
if(arr[k].nextInd==0) //最后面插
{
arr[i].nextInd=0;
arr[k].nextInd=i;
break;
}
}
m=false;
loc=k;//记录比当前元素小的元素下标
k = arr[k].nextInd;
}
}
}