写的代码像道士画符似的

程序代码:
#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