题解 | #字符串排序#
字符串排序
http://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
用的冒泡排序,因为他是稳定的排序,复杂度O(n^2),空间复杂度O(1)
#include <string>
#include <map>
#include <vector>
using namespace std;
int main() {
string str;
char temp;
bool changed =false;//判断内层是否有交换,没有的话代表已经排序完,直接退出输出
while(getline(cin,str)){
for(int i = 1;i<str.size();i++){//冒泡排序
changed = false;
for(int j =0;j<str.size()-i;j++){
if(!isalpha(str[j])) continue;//这里判断第一个是否是字母
int t=j+1;
while((t<str.size())&&!isalpha(str[t])) t++;//这里判断后面那个是否是字母
if(t==str.size()) break;
if(toupper(str[t])<toupper(str[j])){//交换
temp=str[t];
str[t]=str[j];
str[j]=temp;
changed = true;
}//if
}//内层for
if(!changed) break;
}//外层for
cout<<str<<endl;
}
}