Алгоритм сортировки по сложному условию.
Имеется массив струкрур:
typedef struct {
long long did;
long long sid;
double w;
} E;
E vector[100000];//длинна взята совершенно произвольно, но это не важно.
Массив может быть довольно длинный. В среднем его длинна находится в районе 20 - 30 тысяч злементов. Нужно отсортировать этот массив по полю w (в порядке убывания) при этом сгруппировав записи по полю sid (сортировать эти группы надо по максимальному значению поля w в этой группе) и кроме этого необходимо подсчитать сколько всего различных sid встречается в этом массиве. При этом все это необходимо сделать как можно быстрее.
Вот пример значений:
До:
После:
Вот уже несколько деней думаю и не знаю как это можно сделать. Помогите пожалуйста с алгоритмом. Код можно не приводить ибо реализовываться все это будет скорее всего на C или C++
Имеется массив струкрур:
typedef struct {
long long did;
long long sid;
double w;
} E;
E vector[100000];//длинна взята совершенно произвольно, но это не важно.
Массив может быть довольно длинный. В среднем его длинна находится в районе 20 - 30 тысяч злементов. Нужно отсортировать этот массив по полю w (в порядке убывания) при этом сгруппировав записи по полю sid (сортировать эти группы надо по максимальному значению поля w в этой группе) и кроме этого необходимо подсчитать сколько всего различных sid встречается в этом массиве. При этом все это необходимо сделать как можно быстрее.
Вот пример значений:
До:
Код:
did sid w
1 1 0,4
3 2 0,5
2 1 1
Код:
did sid w
2 1 1
1 1 0,4
3 2 0,5
разных sid = 2

нет они считаются по некой формуле.