生活中经常有需要将多个字符串进行排序的需要,比如将美团点评的部分业务名称(外卖、打车、旅游、丽人、美食、结婚、旅游景点、教培、门票、酒店),用拼音表示之后按字母逆序排序。字母逆序指从z到a排序,比如对两个字符串排序时,先比较第一个字母按字母逆序排z在a的前面,当第一个字母一样时再比较第二个字母按字母逆序排,以此类推。特殊情况1)空字符串需排在最前面;2)若一个短字符串是另一个长字符串的前缀则短字符串排在前面。请自行实现代码进行排序,直接调用sort等排序方法将不得分且视为作弊。
生活中经常有需要将多个字符串进行排序的需要,比如将美团点评的部分业务名称(外卖、打车、旅游、丽人、美食、结婚、旅游景点、教培、门票、酒店),用拼音表示之后按字母逆序排序。字母逆序指从z到a排序,比如对两个字符串排序时,先比较第一个字母按字母逆序排z在a的前面,当第一个字母一样时再比较第二个字母按字母逆序排,以此类推。特殊情况1)空字符串需排在最前面;2)若一个短字符串是另一个长字符串的前缀则短字符串排在前面。请自行实现代码进行排序,直接调用sort等排序方法将不得分且视为作弊。
输入为一行,由多个字符串以英文逗号拼接而成,最多不超过128个字符串且可能有重复。每个字符串由小写字母a-z组成,可以为空,最长不超过128个字符。
输出一行,为排序之后的字符串,用逗号隔开
waimai,dache,lvyou,liren,meishi,jiehun,lvyoujingdian,jiaopei,menpiao,jiudian
waimai,menpiao,meishi,lvyou,lvyoujingdian,liren,jiudian,jiehun,jiaopei,dache
def isChange(str1, str2):
min_len = min(len(str1), len(str2))
for i in range(min_len):
if str1[i]>str2[i]:
return 0
elif str1[i]<str2[i]:
return 1
if len(str1) <= len(str2):
return 0
else:
return 1
strings = input().split(',')
str_len = len(strings)
for i in range(0, str_len-1):
for j in range(i+1, str_len):
change_flag = isChange(strings[i], strings[j])
if change_flag:
tmp = strings[i]
strings[i] = strings[j]
strings[j] = tmp
ans = ",".join(strings)
print(ans)
def isbig(s1, s2):
for c1, c2 in zip(s1, s2):
if c1 == c2:
continue
elif c1 > c2:
return True
else:
return False
def partition(index, slistcopy, start, end):
i = start - 1
for j in range(start, end):
if isbig(slistcopy[j], slistcopy[end]):
i += 1
slistcopy[i], slistcopy[j] = slistcopy[j], slistcopy[i]
index[i], index[j] = index[j], index[i]
i += 1
slistcopy[i], slistcopy[end] = slistcopy[end], slistcopy[i]
index[i], index[end] = index[end], index[i]
return i
def quicksort(index, slistcopy, start, end):
if start < end:
m = partition(index, slistcopy, start, end)
quicksort(index, slistcopy, start, m - 1)
quicksort(index, slistcopy, m + 1, end)
def sorts(slist):
length = len(slist)
slistcopy = slist.copy()
maxlength = 0
index = [i for i in range(length)]
for s in slistcopy:
maxlength = max(maxlength, len(s))
for i in range(length):
slistcopy[i] = slistcopy[i].ljust(maxlength, chr(ord('z')+1))
quicksort(index, slistcopy, 0, length - 1)
return index
while True:
try:
slist = list(input().split(','))
index = sorts(slist)
ans = []
for i in range(len(slist)):
ans.append(slist[index[i]])
print(','.join(ans))
except:
break #include<iostream>
#include<algorithm>
#include <vector>
#include <string>
#include<sstream>
using namespace std;
//void swap(string& a, string& b) {
// string tmp;
// tmp = a;
// a = b;
// b = tmp;
//}
bool operator>=(const string& left, const string& right) {
if (left == "" && right != "") {
return true;
}
else if (left != "" && right == "") {
return false;
}
else if (left.size() <= right.size() && left == right.substr(0, left.size())) {
return true;
}
else if (left.size() > right.size() && right == left.substr(0, right.size())) {
return false;
}
else {
return left > right;
}
}
void sortstr(vector<string>& strs,int l,int r) {
int left = l, right = r;
if (l > r) {
return;
}
string sign = strs[left];
while (left < right) {
/*while (strs[right].compare(sign) && left<right) {
right--;
}
while (sign.compare(strs[left]) && left < right) {
left++;
}*/
while (strs[right]>=sign && left < right) {
right--;
}
while (sign>=strs[left] && left < right) {
left++;
}
if (left < right) {
swap(strs[left], strs[right]);
}
}
swap(strs[l], strs[left]);
sortstr(strs, l, left - 1);
sortstr(strs, left + 1, r);
}
int main() {
vector<string> strs;
string word,line;
while (getline(cin,line)) {
if (line.size() == 0) break;
istringstream record(line);
for (int i = 0;i<line.size();i++) {
if (line[i] == ',') {
strs.push_back(word);
word = "";
}
else if(i == line.size()-1){
word += line[i];
strs.push_back(word);
word = "";
break;
}
else {
word += line[i];
}
}
sortstr(strs, 0, strs.size()-1);
for (int j = strs.size()-1; j >=0; j--) {
if(j>0)
cout << strs[j] << ',';
else
cout << strs[j] << endl;
}
}
} import re
temp = input()
emp = temp.split(',')
emp_2 = emp
for i in range(len(emp)):
for j in range(i, len(emp)):
if emp[i] in emp[j]:
continue
if emp[i] < emp[j]:
emp[i],emp[j] = emp[j],emp[i]
if re.match(emp[j], emp[i]):
emp[i], emp[j] = emp[j],emp[i]
for i in range(len(emp)-1):
if emp[i] == '':
for k in range(i,0,-1):
emp[k] = emp[k-1]
emp[0] = ''
rst = ','.join(emp)
print(rst) s = input()
s_list = s.split(',')
n = len(s_list)
for i in range(n, 0, -1):
for j in range(1, i):
if s_list[j] == "":
s_list[j], s_list[j-1] = s_list[j-1], s_list[j]
continue
if s_list[j-1] == "":
continue
if s_list[j] > s_list[j-1]:
s_list[j], s_list[j-1] = s_list[j-1], s_list[j]
if s_list[j] in s_list[j-1] and s_list[j][0]==s_list[j-1][0]:
s_list[j], s_list[j-1] = s_list[j-1], s_list[j]
print(','.join(s_list)) python简洁代码
import sys
def sort(s1, s2):
n = min(len(s1), len(s2))
for i in range(n):
if s1[i] > s2[i]:
return False
elif s1[i] < s2[i]:
return True
if len(s1) > len(s2):
return True
else:
return False
words = [x for x in input().split(',')]
n = len(words)
for i in range(n):
for j in range(i + 1, n):
if sort(words[i], words[j]):
words[i], words[j] = words[j], words[i]
print(','.join(words))
#include <string>
#include <iostream>
#include <vector>
using namespace std;
bool BLargeWord(string str1, string str2) {
if (str1 == "")return true;
int strlength = min(str1.length(), str2.length());
for (int i = 0; i < strlength; i++) {
if (str1[i] > str2[i]) return true;
else if (str1[i] < str2[i])return false;
}
if (str1.length() < str2.length()) return true;
return false;//完全相等的字符返回false;
}
void TM25() {
string instr;
vector<string> worlds;
getline(cin, instr);
string tempworld = "";
//分割字符
for (int i = 0; i < instr.length(); i++) {
if (instr[i] == ',') {
worlds.push_back(tempworld);
tempworld = "";
}
else tempworld.push_back(instr[i]);
if (i == instr.length() - 1) worlds.push_back(tempworld);
}
//排序
vector<string> sortedWords;
sortedWords.push_back(worlds[0]);
for (int i = 1; i < worlds.size(); i++) {
for (int j = 0; j < sortedWords.size(); j++) {
if (BLargeWord(worlds[i], sortedWords[j])) {
sortedWords.insert(sortedWords.begin() + j, worlds[i]);
break;
}
if (j == sortedWords.size() - 1) {
sortedWords.push_back(worlds[i]);
break;
}
}
}
//输出
for (int i = 0; i < sortedWords.size(); i++) {
if (i == sortedWords.size() - 1)cout << sortedWords[i] << endl;
else cout << sortedWords[i] << ",";
}
}
int main(){
TM25();
return 0;
}
import sys
import re
line = sys.stdin.readline().strip() # 注意要用strip()跳过输入中开头和结尾的空格或者换行符,否则输出会受到影响
keywords = line.split(',')
for i in range(len(keywords)):
for j in range(i + 1, len(keywords)):
if keywords[i] < keywords[j]:
keywords[i], keywords[j] = keywords[j], keywords[i]
if re.match(keywords[j], keywords[i]):
keywords[i], keywords[j] = keywords[j], keywords[i]
for i in range(len(keywords) - 1):
if keywords[i] == '':
for j in range(i, 0, -1):
keywords[j] = keywords[j - 1]
keywords[0] = ''
res = ','.join(keywords)
print(res) s=list(input().split(','))
def axiao(a,b):
l1=len(a)
l2=len(b)
for i in range(min(l1,l2)):
if a[i]<b[i]:
return True
elif a[i]>b[i]:
return False
else:
continue
if l1>=l2:
return True
else:
return False
def quicksort(s):
if not s:
return []
p=s[0]
s.remove(p)
left=[i for i in s if axiao(i,p)]
right=[i for i in s if not axiao(i,p)]
return quicksort(left)+[p]+quicksort(right)
print(','.join(quicksort(s)[::-1]))
基于递归快排,针对各种排序题都适用,只要把大小定义函数更改 import sys
s = sys.stdin.readline().strip("\n").split(",")
# 自行实现排序,快排
def quickSort(s):
if len(s) <= 1:
return s
else:
left, right = [], []
for i in range(1, len(s)):
if s[i] == "" or (s[i] >= s[0] and not s[i].startswith(s[0])) or s[0].startswith(s[i]):
left.append(s[i])
else:
right.append(s[i])
return quickSort(left) + s[0:1] + quickSort(right)
s = quickSort(s)
for i in range(len(s)):
if i < len(s) - 1:
print(s[i], end=",")
else:
print(s[i]) n = input() str_list = n.split() print(str_list) for i in range(0,len(str_list)): for j in range(i+1,len(str_list)): if str_list[j]>str_list[i]: str_list[j],str_list[i] = str_list[i],str_list[j] print(str_list)
#include <bits/stdc++.h>
using namespace std;
bool smaller(string str1, string str2){
if(str1.length() == 0) return false;
if(str2.length() == 0) return true;
//if(str1[0] == '\0') return true;
//if(str2[0] == '\0') return false;
if(str1[0] < str2[0]) return true;
if(str1[0] > str2[0]) return false;
else return smaller(str1.substr(1,str1.length()-1), str2.substr(1,str2.length()-1));
}
void change(vector<string> &vec, int i, int j){
string temp(vec[i]);
vec[i].assign(vec[j]);
vec[j].assign(temp);
return;
}
int main(){
vector<string> vec;
int j = 0, i = 0;
string s;
cin >> s;
for(; j < s.length(); ++j) {
if(s[j] == ',') {
vec.push_back(s.substr(i, j - i));
i = j + 1;
}
}
vec.push_back(s.substr(i, j - i));
int l = (int)vec.size();
for(int i = 0; i<l; i++){
for(int j = 0; j<l-1; j++){
if(smaller(vec[j],vec[j+1])) change(vec, j, j+1);
}
}
for(int i = 0; i<l-1; i++){
cout << vec[i] << ',';
}
cout << vec[l-1];
return 0;
} def solution(data):
lc = list('abcdefghijklmnopqrstuvwxyz ')
lc = lc[::-1]
dic = {}
for i in range(len(lc)):
dic[i] = []
maxL = 0
for i in range(len(data)):
if len(data[i]) > maxL:
maxL = len(data[i])
for i in range(len(data)):
data[i] = data[i].ljust(maxL, ' ')
for i in range(maxL-1, -1, -1):
for j in range(len(data)):
idx = lc.index(data[j][i])
dic[idx].append(data[j])
new_data = []
for k in dic:
new_data += dic[k]
dic[k] = []
data = new_data
print(','.join(x.strip() for x in data))
if __name__ == '__main__':
data = input().strip().split(',')
solution(data) #include<stdio.h>
#include<string.h>
#define ITEMS 128
#define LENGTH 129
char cmp(char* a, char* b){
int i = 0; /*自定义的比较函数,类似strcmp*/
do {
if (a[i] != b[i])
if (a[i] == '\0')
return 1;
else if (b[i] == '\0')
return -1;
else
return a[i] - b[i];
} while (a[i] != '\0' && b[i++] != '\0');
return 0;
}
int main(){
char ch=0;
int i=0;
struct list {char a[LENGTH];};
struct list a[ITEMS];
struct list mid; /*用结构类型可以方便地换序*/
for (i=0;i < ITEMS&&ch!='\n';i++) /*输入*/
{
a[i].a[0] = '\0';
for (int j = 0;j < LENGTH - 1 &&
(strchr(",\n", ch = getchar()) == NULL);j++)
a[i].a[j] = ch, a[i].a[j + 1] = '\0';
}
for (int e = 0;e < i;e++)
for (int m = e + 1;m < i;m++)
if (cmp(a[e].a, a[m].a) < 0)
mid = a[e], a[e] = a[m], a[m] = mid; /*排序*/
for (int n = 0;n < i;n++)
if (n < i - 1)
printf("%s,", a[n].a); /*输出*/
else
printf("%s", a[n].a);
return 0;
} 平安通过所有用例