मान लीजिए हम निम्नलिखित समस्या है - हम, की (एक्स, वाई) निर्देशांक एक सेट और एक नाम पढ़ने के लिए तो क्रम में उन्हें सॉर्ट, मूल (0, 0 से दूरी बढ़ाने के द्वारा चाहते हैं)। यहाँ एक एल्गोरिथ्म जो बुलबुला तरह सरल का उपयोग करें:मूल बिंदु से निकटतम स्थान खोजने
#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;
}
लेकिन मैं एसटीएल छँटाई के बजाय एल्गोरिथ्म बुलबुला तरह लिखना चाहते हैं। ऐसा कैसे करें?
मेरा मतलब है कि, मैं कैसे एसटीएल तरह एल्गोरिथ्म में जिले समारोह इस्तेमाल करना चाहिए?
+ 1। यदि 'point' बड़ा है, इसे और अधिक' my_sort के लिए कुशल हो सकता है() '' बजाय वस्तुओं को कॉपी करने की point' को स्थिरांक संदर्भ ले। –
अच्छी कॉल। जवाब तदनुसार अद्यतन किया गया। –