Supongamos que tenemos el siguiente problema: queremos leer un conjunto de coordenadas (x, y) y un nombre, luego ordenarlos en orden, aumentando la distancia desde el origen (0, 0) Aquí es un algoritmo que utilizan más simple ordenamiento de burbuja:encuentra la ubicación más cercana al punto original
#include<iostream>
#include <algorithm>
using namespace std;
struct point{
float x;
float y;
char name[20];
};
float dist(point p){
return p.x*p.x+p.y*p.y;
}
void sorting(point pt[],int n){
bool doMore = true;
while (doMore) {
doMore = false; // Assume no more passes unless exchange made.
for (int i=0; i<n-1; i++) {
if (dist(pt[i]) > dist(pt[i+1])) {
// Exchange elements
point temp = pt[i]; pt[i] = pt[i+1]; pt[i+1] = temp;
doMore = true; // Exchange requires another pass.
}
}
}
}
void display(point pt[],int n){
for (int i=0;i<n;i++){
cout<<pt[i].name<< " ";
}
}
int main(){
point pts[1000];
int n=0;
while (cin>>pts[n].name>>pts[n].x>>pts[n].y){
n++;
}
sorting(pts,n);
display(pts,n);
return 0;
}
Pero yo quiero escribir algoritmo de ordenación STL en lugar de ordenamiento de burbuja. ¿Cómo hacer eso?
Quiero decir que, ¿cómo debo usar la función dist en el algoritmo de ordenamiento STL?
+ 1. Si 'point' es grande, puede ser más eficiente que' my_sort() 'tome referencias a' point' en lugar de copiar los objetos. –
Buena llamada. Respuesta actualizada en consecuencia. –