c531 - 基礎排序 #1-1 ( 偶數排序 )
題目描述
題目要求讀取一行包含逗號分隔的數字字串,將字串中的數字轉換為整數,然後僅對其中的偶數進行排序。排序後,需要將排序後的偶數放回原始位置,保持奇數的位置不變,最後輸出排序後的數字字串。
解題思路
程式首先讀取輸入字串,並將其解析為整數陣列 a。接著,程式遍歷陣列 a,將所有偶數提取到另一個陣列 b 中。然後,對陣列 b 進行排序。最後,程式再次遍歷陣列 a,將排序後的偶數從陣列 b 中放回 a 中,保持奇數的位置不變。最後,程式將陣列 a 中的數字輸出為逗號分隔的字串。
複雜度分析
- 時間複雜度: O(n log n)
- 空間複雜度: O(n)
程式碼
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
int a[50],i=0,b[50];
string n;
while(cin >> n){
for(int j=0;j<n.length();j++){
int p=0;
while(n[j]!=','&&j<n.length()){
p*=10;
p+=n[j]-48;
j++;
}
a[i]=p;
i++;
}
int k=0;
if(i==1)
cout << a[i-1] << "\n";
else{
for(int z=0;z<i;z++){
if(a[z]%2==0){
b[k]=a[z];
k++;
}
}
sort(b,b+k);
k=0;
for(int z=0;z<i;z++){
if(a[z]%2==0){
a[z]=b[k];
k++;
}
}
for(int ii=0;ii<i;ii++){
if(ii!=i-1)
cout << a[ii] << ',';
}
cout << a[i-1] <<"\n";
}
i=0;
}
}