#include <stdio.h>
#include <malloc.h>
typedef struct { int v ; } base_insert_node ;
typedef struct { base_insert_node * bins ; int len ; } base_insert_list;
void init( base_insert_list * , int * , int );
void print_base_insert_list( base_insert_list * );
void base_insert_sort( base_insert_list * );
void binary_insert_sort( base_insert_list * );
int main ()
{
int arr[] = {6,7,9,10,67,34,21,55,12,4,7};
int len = sizeof(arr)/sizeof(int);
base_insert_list bil;
init(&bil , arr , len);
//base_insert_sort(&bil);
binary_insert_sort(&bil);
print_base_insert_list(&bil);
getchar();
}
void init(base_insert_list *bil , int *arr , int len)
{
bil->len = len;
bil->bins = (base_insert_node *) malloc (len * sizeof(base_insert_node));
int i ;
for(i=0 ; i<len ; i++)
(bil->bins + i)->v = *(arr+i);
}
void print_base_insert_list( base_insert_list *bil )
{
int i = 0 ;
for(i=0 ; i<bil->len ; i++)
printf("%2d - " , (bil->bins + i)->v );
printf("\n");
}
void base_insert_sort( base_insert_list *bil )
{
int i ;
int j ;
for ( i=1 ; i < bil->len ; i++ )
{
for (j = 0 ; j < i ; j++)
{
if( (bil->bins + i)->v <= (bil->bins + j)->v )
{
base_insert_node tmp_bin = *(bil->bins + i);
int k ;
for ( k = i-1 ; k >= j ; k-- )
*(bil->bins + k + 1) = *(bil->bins + k);
*(bil->bins + j) = tmp_bin;
}
}
}
}
void binary_insert_sort( base_insert_list *bil )
{
int i ;
int k ;
for ( i = 1 ; i < bil->len ; i++ )
{
int low = 0 ;
int high = i - 1 ;
int mid = (low + high )/2;
while( low != mid )
{
if( (bil->bins + mid )->v < (bil->bins + i)->v )
low = mid;
else
high = mid;
mid = (low + high )/2;
}
if((bil->bins + i - 1 )->v > (bil->bins + i)->v && (bil->bins + i)->v > (bil->bins + mid)->v){
base_insert_node tmp_bin = *(bil->bins + i);
for ( k = i-1 ; k >= mid+1 ; k-- )
*(bil->bins + k + 1) = *(bil->bins + k);
*(bil->bins + mid + 1 ) = tmp_bin;
}
else if((bil->bins + mid )->v > (bil->bins + i)->v){
base_insert_node tmp_bin = *(bil->bins + i);
for ( k = i-1 ; k >= mid; k-- )
*(bil->bins + k + 1) = *(bil->bins + k);
*(bil->bins + mid ) = tmp_bin;
}
}
}
折半插入排序
最新推荐文章于 2023-10-19 14:53:17 发布