Chromeでの文字列配列ソートがおかしい


Mac版Chrome(42.0.2311.135 64-bit)で、  
自前の比較関数を用いて文字列配列のソートをすると変な結果になります。

以下から試せます。

[code]

    var arr1 = ["hoge0", "piyo0", "fuga0", "fuga1", "fuga2", "fuga3", "fuga5", "fuga6", "fuga7", "fuga8"];
    var arr2 = ["hoge0", "piyo0", "fuga0", "fuga1", "fuga2", "fuga3", "fuga5", "fuga6", "fuga7", "fuga8", "fuga9"];
    var compare = function(a, b){
      return a > b;
    };
    
    document.body.innerHTML += '1) ' + arr1.sort(compare).join(',') + '<br>';
    document.body.innerHTML += '2) ' + arr2.sort(compare).join(',') + '<br>';
    document.body.innerHTML += '3) ' + arr2.sort().join(',');
[/code]

Firefoxなら2)と3)が同じ結果になるのですが、  
Chromeで実際に実行すると以下の結果になります。2)が変です。

[code]

    1) fuga0,fuga1,fuga2,fuga3,fuga5,fuga6,fuga7,fuga8,hoge0,piyo0
    2) fuga3,fuga9,fuga0,fuga1,fuga2,fuga8,fuga5,fuga6,fuga7,hoge0,piyo0
    3) fuga0,fuga1,fuga2,fuga3,fuga5,fuga6,fuga7,fuga8,fuga9,hoge0,piyo0
    
[/code]

これはバグなのでしょうか？それともソートの仕方が間違っているのでしょうか？




比較関数には

[code]

    １つ目の引数が２つ目の引数よりも小さい場合は、負の値を返す。
    ２つの引数が等しい場合は０を返す。
    １つ目の引数が２つ目の引数よりも大きい場合は、正の値を返す。
    
[/code]

必要があります。  
なので、示された比較関数は正確にはこの条件を満たしていません。  
例えば、以下のようにする必要があります。  
`var compare = function(a,b){ return (a > b) - (a < b); };`




比較関数には

[code]

    １つ目の引数が２つ目の引数よりも小さい場合は、負の値を返す。
    ２つの引数が等しい場合は０を返す。
    １つ目の引数が２つ目の引数よりも大きい場合は、正の値を返す。
    
[/code]

必要があります。  
なので、示された比較関数は正確にはこの条件を満たしていません。  
例えば、以下のようにする必要があります。  
`var compare = function(a,b){ return (a > b) - (a < b); };`

