/*******************************************************************************
* @version $v1.0$
* @date $6.9.2012$
* @author $Alfred$
* @brief two versions of insert sort include non-recursion
and recursion
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define NUM 10
typedef enum chooseVersion {non_recursion, recursion} chooseVersion;
int main(void)
{
int a[NUM]={12,23,7,0,123,7,0,9,34,-1};
int k;
chooseVersion chooseID;
void insertSort(int *arr, int num, chooseVersion ID);
printf("pls choose version(0 is non-recursion or 1 is recursion)\n");
scanf("%d",&chooseID);
insertSort(a,sizeof(a)/sizeof(a[0]),chooseID);
for(k = 0; k < NUM; k++)
{
printf("%d ",a[k]);
}
return 0;
}
void insertSort(int *arr, int num, chooseVersion ID)
{
int i,key;
if(ID == non_recursion)
{
int j;
for(i = 1; i < num; i++)
{
key = arr[i];
j = i - 1;
while(j >= 0 && arr[j] > key)
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
printf("non_recursion is called\n");
}
else
{
if(num == 1)
{
return;
}
else
{
insertSort(arr, num-1,ID);
key = arr[num];
i = num-1;
while( i >= 0 && arr[i] > key)
{
arr[i+1] = arr[i];
i--;
}
arr[i+1] = key;
}
}
}