//直接插入排序
#include<stdio.h>
//升序
void insertsort_1( int s[],int n )
{
int i,j;
for( i=2;i<n;i++ ){
if( s[i]<s[i-1] ){
s[0]=s[i]; //把需要前移的数安置到临时区s[0]
for( j=i-1;s[0]<s[j];j-- ){
s[j+1]=s[j]; //把比安置在临时区s[0]大的数往后移
}
s[j+1]=s[0];
} //最后把安置在临时区s[0]中的数放到给它腾出来的位置上
}
}
//降序
void insertsort_2( int s[],int n )
{
int i,j;
for( i=2;i<n;i++ ){
if( s[i]>s[i-1] ){
s[0]=s[i]; //把需要后移的数安置到临时区s[0]
for( j=i-1;s[0]>s[j];j-- ){
s[j+1]=s[j]; //把比安置在临时区s[0]小的数往后移
}
s[j+1]=s[0];
} //最后把安置在临时区s[0]中的数放到给它腾出来的位置上
}
}
int main()
{
//s[0]处放置不参与排序的0,后面的数参与排序 ,且s[0]处当作临时安放数据的临时区
int s[7]={0,2,1,34,10,45,3};
int i;
insertsort_1( s,7 );
printf("升序:");
for( i=1;i<7;i++ ){
printf("%d ",s[i]);
}
insertsort_2( s,7 );
printf("\n降序:");
for( i=1;i<7;i++ ){
printf("%d ",s[i]);
}
return 0;
}