вариант по алгоритму из готовых решений ...
<script>
function sortNatural(arr) {
function isDigit(a) {
a = a.charCodeAt(0);
return a >= 47 && a <= 57
}
function strToArr(a) {
var b = {
type: isDigit(a[0]),
str: ""
},
c = [b];
c.item = a;
for (var i = 0; i < a.length; i++) {
var e = a[i],
type = isDigit(e);
if (b.type == type) b.str += e;
else {
b = {
type: type,
str: e
};
c.push(b)
}
}
return c
}
function compare(a, b) {
var length = Math.min(a.length, b.length);
for (var i = 0; i < length; i++) {
var typeA = a[i].type,
typeB = b[i].type,
strA = a[i].str,
strB = b[i].str;
if (typeA === typeB && strA !== strB) return typeA ? strA - strB : strA > strB ? 1 : -1;
if (typeA !== typeB) return typeA ? -1 : 1
}
return a.length - b.length
}
return arr.map(strToArr).sort(compare).map(function(el) {
return el.item
})
};
var arr = ["a 10a", "a 1b", "a 2", "a 1"];
arr = sortNatural(arr);
document.write(JSON.stringify(arr, null, 4)+"<br>");
arr = ["iag12.png", "iq10.png", "img2.png", "img1.png"];
arr = sortNatural(arr);
document.write(JSON.stringify(arr, null, 4)+"<br>")
arr = ["img12.png", "img10.png", "img2.png", "img1.png"];
arr = sortNatural(arr);
document.write(JSON.stringify(arr, null, 4)+"<br>");
arr = ['Банан', 'Абрикос', 'Зелень'];
arr = sortNatural(arr);
document.write(JSON.stringify(arr, null, 4)+"<br>");
arr = "12345678901234567890".split("");
arr = sortNatural(arr);
document.write(JSON.stringify(arr, null, 4)+"<br>");
</script>