问题已经解决```
程序代码:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int srsj ( int * ) ;
void tyws ( int *, int *b, int c ) ;
void shellsort ( int *, int *w, int n ) ;
int main ( )
{
int i, c ;
int s[20] ;
int b[20] ;
c = srsj (s) ; /*输入我们要输入的数据<=20个*/
tyws (s,b,c) ; /*将所以数转换为4位,不足的右边补上0*/
printf ("\n\n你输入的数为:\n"); /*将我们输入的数显示出来*/
for ( i=0; i<c; i++ )
printf ("%ld.", s[i]);
shellsort ( b,s,c ) ; /*进行排序操*/
printf ("\n") ;
printf ("输出结果为:\n") ; /*输出结果*/
for ( i=0; i<c; i++ )
printf ("%ld", s[i]);
getch();
return 0;
}
int srsj (int *s)
{
int i, c ;
printf ("请输入你想输入的数的个数:\n");
scanf (" %d", &c ) ;
system ("cls") ;
printf ("请输入你想输入的数:\n");
for ( i=0; i<c; i++ )
scanf (" %ld", &s[i]);
return c ;
}
void tyws(int *s, int*b, int c) /*根据数的位数补0*/
{
int i ;
for ( i=0; i<c; i++ )
{
if ( s[i] < 10 )
b[i] = s[i]*1000 ;
else if ( (s[i] >= 10) && (s[i] < 100) )
b[i] = s[i]*100 ;
else if ( (s[i] >= 100 ) && (s[i] < 1000 ) )
b[i] = s[i]*10 ;
else b[i] = s[i] ;
}
}
/*这是SHELL排序算法```我在里面加上了对原始输入数据的排序``这样就对原来我们输入和扩展后的数同时排序*/
/*LZ若是看不懂下面的算法``不要紧下来研究``现在只要知道`它是用来排序的就可以了*/
void shellsort(int *v, int *w, 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;
temp = w[j];
w[j] = w[j+gap];
w[j+gap] = temp;
}
}