# Sort an Array of Points by their distance from a reference Point

• Last Updated : 15 Jun, 2022

Given an array arr[] containing N points and a reference point P, the task is to sort these points according to their distance from the given point P.

Examples:

Input: arr[] = {{5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}}, P = (0, 0)
Output: (1, 0) (2, 0) (3, 0) (4, 0) (5, 0)
Explanation:
Distance between (0, 0) and (1, 0) = 1
Distance between (0, 0) and (2, 0) = 2
Distance between (0, 0) and (3, 0) = 3
Distance between (0, 0) and (4, 0) = 4
Distance between (0, 0) and (5, 0) = 5

Hence, the sorted array of points will be: {(1, 0) (2, 0) (3, 0) (4, 0) (5, 0)}
Input: arr[] = {{5, 0}, {0, 4}, {0, 3}, {2, 0}, {1, 0}}, P = (0, 0)
Output: (1, 0) (2, 0) (0, 3) (0, 4) (5, 0)
Explanation:
Distance between (0, 0) and (1, 0) = 1
Distance between (0, 0) and (2, 0) = 2
Distance between (0, 0) and (0, 3) = 3
Distance between (0, 0) and (0, 4) = 4
Distance between (0, 0) and (5, 0) = 5
Hence, the sorted array of points will be: {(1, 0) (2, 0) (0, 3) (0, 4) (5, 0)}

Approach: The idea is to store each element at its distance from the given point P in a pair and then sort all the elements of the vector according to the distance stored.

Distance = • Append the distance in an array
• Sort the array of distance and print the points based on the sorted distance.
• Time Complexity: As in the above approach, there is sorting of an array of length N, which takes O(N*logN) time in the worst case. Hence, the Time Complexity will be O(N*log N).
• Auxiliary Space Complexity: As in the above approach, there is extra space used to store the distance and the points as pairs. Hence, the auxiliary space complexity will be O(N).

## C++

 // C++ program #include using namespace std; bool compare(pair<int, pair<int, int> > a,             pair<int, pair<int, int> > b){    if (a.first == b.first) {        return 0;    }    else {        return (a.first < b.first) ? -1 : 1;    }} // Function to sort the array of// points by its distance from Pvoid sortArr(vector > arr, int n, vector<int> p){    // Vector to store the distance    // with respective elements     vector > > vp;    // Storing the distance with its    // distance in the vector array    for (int i = 0; i < n; i++) {         int dist = pow((p - arr[i]), 2)                   + pow((p - arr[i]), 2);        vp.push_back(make_pair(            dist, make_pair(arr[i], arr[i])));    }     // Sorting the array with    // respect to its distance    sort(vp.begin(), vp.end(), compare);     // Output    for (int i = 0; i < n; i++) {        cout << "(" << vp[i].second.first << ", "             << vp[i].second.second << ") " << endl;    }} int main(){    vector > arr        = { { 5, 5 }, { 6, 6 }, { 1, 0 },            { 2, 0 }, { 3, 1 }, { 1, -2 } };    int n = 6;    vector<int> p = { 0, 0 };       // Function to perform sorting    sortArr(arr, n, p);} // The code is contributed by Gautam goel (gautamgoel962)

## Javascript

 

Output:

(1, 0) (2, 0) (1, -2) (3, 1) (5, 5) (6, 6)

My Personal Notes arrow_drop_up