对于这个排序的算法。我真的解释不清楚,看着伪代码将代码敲出来了。并且能很好的实现排序过程,仔细想想自己好像明白是怎么回事,但是不知道怎么来表达出来,我还是先把我写的代码贴出来,争取大家一起理解理解,我也在看看这个代码。。争取过段时间有个满意的答复。。
C语言:
Codee#12907
#include <stdio.h >
#include<stdlib.h>
void stooge_sort( int * a , int i , int j)
{
int temp;
int k;
if( a [ i ] < a [ j ])
{
temp = a [ i ];
a [ i ] = a [ j ];
a [ j ] = temp;
}
if( i + 1 >= j) //结束的条件
return;
else
{
k =( j - i + 1) / 3; //划分3部分
stooge_sort( a , i , j - k);
stooge_sort( a , i + k , j);
stooge_sort( a , i , j - k);
}
}
int main()
{
int a [ 100 ];
int n;
int i;
while( scanf( "%d" , &n))
{
for( i = 1; i <=n; i ++)
{
scanf( "%d" , & a [ i ]);
}
stooge_sort( a , 1 ,n);
for( i = 1; i <=n; i ++)
{
printf( "%d " , a [ i ]);
}
}
return 0;
}
#include<stdlib.h>
void stooge_sort( int * a , int i , int j)
{
int temp;
int k;
if( a [ i ] < a [ j ])
{
temp = a [ i ];
a [ i ] = a [ j ];
a [ j ] = temp;
}
if( i + 1 >= j) //结束的条件
return;
else
{
k =( j - i + 1) / 3; //划分3部分
stooge_sort( a , i , j - k);
stooge_sort( a , i + k , j);
stooge_sort( a , i , j - k);
}
}
int main()
{
int a [ 100 ];
int n;
int i;
while( scanf( "%d" , &n))
{
for( i = 1; i <=n; i ++)
{
scanf( "%d" , & a [ i ]);
}
stooge_sort( a , 1 ,n);
for( i = 1; i <=n; i ++)
{
printf( "%d " , a [ i ]);
}
}
return 0;
}