/*shell排序算法shellsort函数按递增顺序对数组排序v[0]***v[n-1] */
void shellsort(int v[],int n)
{
int gap,i,j,temp;
for(gap=n/2;gap>0;gap/=2)
for(i=gap;i<n;i++)
for(j=i-gap;j>=0&&v[j]>v[j+gap];j-=gap){
temp=v[j];
v[j]=v[j+gap];
v[j+gap]=temp;
}
}
shell排序算法基本思想:线比较距离较远的元素,而不是像简单交换排序算法那样先比较相邻的元素.这样可以快速减少大量的无序情况,从而减轻后续的工作.被比较的元素之间的距离逐步减少,直到减少为1,这是排序变成了相邻元素的互换.
/*reverse函数:倒置各个字符串中各个字符的位置*/ 、
#include<string.h>
void reverse(char s[ ])
{
int c,i,j;
for(i=0,j=strlen(s)-1;i<j;i++,j--){
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
/*itoa函数:将数字n转换为字符串并保存在S中*/
void itoa(int n,char s[])
{
int i,sign;
if((sign=n)<0) //记录符号
n=-n;
i=0;
do { //以反序生成数字
s[i++]=n%10+'0';
} while((n/=10)>0);
if(sign<0)
s[i++]='-';
reverse(s);
}
/*atoi函数:将s转换为整型数*/
#include<ctype.h>
int atoi(char s[])
{
int i,n,sign;
for(i=0;isspace(s[i]);i++) //跳过空白符
;
sign=(s[i]=='-')?-1:1;
if(s[i]=='+'||s[i]=='-') //跳过符号
i++;
for(n=0;isdigit(s[i]);i++)
n=10*n+(s[i]-'0');
return sign*n;
}
/*itob:convert n to characters in s - base b*/
void itob(int n,char s[],int b)
{
int i,j,sign;
void reverse(char s[]);
if((sign=n)<0) //record sign
n=-n; //make n positive
i=0;
do{ //generate digits in reverse order
j=n%b; //get next digit
s[i++]=(j<=9)?j+'0':j+'a'-10;
}while((n/=b)>0);
if(sign < 0) //delete it
s[i++]='-';
s[i]='/0';
reverse(s);
}
int trim(char s[])
{
int n;
for(n=strlen(s)-1;n>=0;n--)
if(s[n]!=' '&&s[n]!='/t'&&s[n]!='/n')
break;
s[n+1]='/0';
return n;
}