Shellsort: attention to the algorithm of internal
#include<stdio.h>
#define MAX 100
int N=0;
char s[MAX];
int is_empty()
{
return N==0;
}
void input(char data)
{
s[N++]=data;
}
int less(int m,int n)
{
if(s[m]<=s[n])
return 1;
else
return 0;
}
void swap(int m,int n)
{
char temp;
temp=s[m];
s[m]=s[n];
s[n]=temp;
}
void shell_sort()
{
int h=1,i,j;
while(h<=N/3)
h=h*3+1;//4
while(h>=1)//4,1
{
for( i=h;i<=N;i++)
{
for( j=i;j>=h&&less(j,j-h);j=j-h)
swap(j,j-h);
}
h=h/3;
}
}
void main()
{
char ch;
int i=0;
printf("Input character : ");
while((ch=getchar())!='\n')
input(ch);
shell_sort();
while(i<=N)
putchar(s[i++]);
}
运行结果:bacl------->abcl