Shortcode Function not working

You are passing show_blog_posts two parameters…

$str .= show_blog_posts($post->ID, '');

… but you have defined it to accept none…

function show_blog_posts() {

There seems to be some disconnect between your two blocks of code. I’d suggest actually passing the $post object the way that you are trying to.

function show_blog_posts($post = NULL) {
    global $blog, $posts;
    if (empty($post)) {
        global $post;
    }
    // the rest of your function

No idea what that second parameter is supposed to be.