How to change the post author when the post is published?

From the code you have posted there, it doesn’t look like, at any time, you’re are hooking the function on to save_post outside of your function.

function change_pos_auth($post_id){
    if ( ! wp_is_post_revision( $post_id ) ){

        // unhook this function so it doesn't loop infinitely
        remove_action('save_post','change_pos_auth');

        if ( isset($_GET['auth_id']) ) {
             $args = array('ID'=>$post_id,'post_author'=>$_GET['auth_id']);
             // update the post, which calls save_post again
             wp_update_post( $args );
        }

       // re-hook this function
       add_action('save_post','change_pos_auth');

    }
}
add_action('save_post', 'change_pos_auth');

The rest of the code looks ok providing $_GET[‘auth_id’] is populated.

NB: Don’t forget to sanitize that value before you put it into the database.