写的代码像道士画符似的
程序代码:
#include <stdio.h>
void swap_by_ptr( int* a, int* b )
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main( void )
{
int buf[9];
// 输入
const size_t n = sizeof(buf)/sizeof(*buf);
for( size_t i=0; i!=n; ++i )
scanf( "%d", &buf[i] );
// 原样输出
printf( "first: " );
for( size_t i=0; i!=n; ++i )
printf( " %d", buf[i] );
putchar( '\n' );
// 求最大值最小值索引
size_t min_idx=0, max_idx=0;
for( size_t i=0; i!=n; ++i )
{
if( buf[min_idx] > buf[i] )
min_idx = i;
if( buf[max_idx] < buf[i] )
max_idx = i;
}
// 最大元素放第一位
swap_by_ptr( &buf[0], &buf[max_idx] );
if( min_idx == 0 ) // 如果第一位原本是最小值,那么这样交换之后,最小值跑到max_idx的位置
min_idx = max_idx;
// 最小元素放最后一位
swap_by_ptr( &buf[n-1], &buf[min_idx] );
// 输出
printf( "later: " );
for( size_t i=0; i!=n; ++i )
printf( " %d", buf[i] );
putchar( '\n' );
}
输入 0 0 0 0 0 0 0 0 0,输出 0 0 0 0 0 0 0 0 0
输入 9 8 7 6 5 4 3 2 1,输出 9 8 7 6 5 4 3 2 1
输入 1 2 3 4 5 6 7 8 9,输出 9 2 3 4 5 6 7 8 1
输入 4 3 2 1 9 8 7 6 5,输出 9 3 2 5 4 8 7 6 1