Angenommen, wir haben das folgende Problem - wir wollen eine Reihe von (x, y) Koordinaten und einen Namen lesen, dann sortieren sie in der Reihenfolge, indem Sie den Abstand vom Ursprung (0, 0). Hier ist ein Algorithmus, der einfachste Blase Art verwenden:Finden Sie den nächsten Ort vom ursprünglichen Punkt
#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;
}
Aber ich will STL Sortieralgorithmus statt Blase Art schreiben. Wie geht das?
Ich meine, wie soll ich dist-Funktion in STL-Sortieralgorithmus verwenden?
+ 1. Wenn "Punkt" groß ist, kann es effizienter sein, wenn "my_sort()' const-Referenzen auf "point" nimmt, anstatt die Objekte zu kopieren. –
Guter Anruf. Antwort aktualisiert entsprechend. –