argsort cортировка в javascript
Как реализовать такую сортировку? Например у нас есть масив [3, 1, 2], в результате мы должны получить такое: [1, 2, 0].
объяснение: наименьший элемент в нас = 1, в масиве он находитса под индексом - 1. Потом 2, индекс = 2. И наконец наибольшее значение = 3 і оно первое есть индекс = 0. P.S. Я хочу получить аналог argsort как в python но только в js. |
jsNotGuru,
элементы все уникальны или есть повторы? |
могут быть повторы.
|
var arr = [3, 1, 2];
var result = arr.map(function(a, i) { return i; }).sort(function(a, b) { return arr[a] - arr[b]; });
alert(result.join(", "));
|
Спс!!!!
|
jsNotGuru,
function fn(c) {
var d = {};
return c.slice().sort(function(a, b) {
return a - b
}).map(function(a) {
var b = d[a] || 0,
b = c.indexOf(a, b);
d[a] = b + 1;
return b
})
};
alert(fn([3, 1, 2]))
alert(fn([3, 3, 1, 2]))
|
Яростный Меч,
:victory: твой вариаант проще :) |
function sortInd(arr) {
var isSort, arrInd = [], i, len, temp;
for (i = 0, len = arr.length; i < len; i++) {
arrInd.push(i);
}
do {
isSort = true;
for(i = 0; i < len - 1; i++) {
if (arr[i] > arr[i + 1]) {
isSort = false;
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
temp = arrInd[i];
arrInd[i] = arrInd[i + 1];
arrInd[i + 1] = temp;
}
}
} while (isSort);
return arrInd;
}
alert(sortInd([3, 1, 2]));
|
| Часовой пояс GMT +3, время: 14:39. |