a915 - 二维点排序
題目描述
題目要求將給定的 n 個二维平面上的點,按照 x 座標為第一關鍵字,y 座標為第二關鍵字的方式從小到大進行排序,並輸出排序後的點的座標。
解題思路
此題的核心是實現一個排序演算法。程式碼使用了一個簡單的冒泡排序來對點進行排序。排序的依據是先比較 x 座標,如果 x 座標相同,則比較 y 座標。對於每個點,程式碼會與後面的點進行比較,如果 x 座標大於後面的點的 x 座標,或者 x 座標相同但 y 座標大於後面的點的 y 座標,則交換兩個點的位置。這個過程會重複進行,直到所有點都按照指定的順序排列。
複雜度分析
- 時間複雜度: O(n^2) (由於使用了冒泡排序)
- 空間複雜度: O(n) (用於儲存點的陣列)
程式碼
#include <iostream>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int a,tem;
while(cin >> a){
int b[2][a];
for(int i=0;i<a;i++){
cin >> b[0][i] >> b[1][i];
}
for(int i=0;i<a;i++){
for(int j=i+1;j<a;j++){
if(b[0][i]>b[0][j]){
tem=b[1][i];
b[1][i]=b[1][j];
b[1][j]=tem;
tem=b[0][i];
b[0][i]=b[0][j];
b[0][j]=tem;
}
else if(b[0][i]==b[0][j]&&b[1][i]>b[1][j]){
b[0][i]=b[1][i];
b[1][i]=b[1][j];
b[1][j]=b[0][i];
b[0][i]=b[0][j];
}
}
}
for(int i=0;i<a;i++){
cout << b[0][i] << " " << b[1][i] << "\n";
}
}
}