华为2015实习上机:字符串排序
来源:互联网 发布:淘宝粉丝怎么看 编辑:程序博客网 时间:2024/05/21 04:02
一、按照字母的ascii码顺序排序,其他非字母字符在字符串中位置不变
快速排序算法
可以看出,下面的程序就是一个快速排序算法,只是增加了对非英文字母的字符的处理:
快速排序参考文章快速排序的几种常见实现
//输入字符串,按照字母的ascii码顺序排序,其他非字母字符在字符串中位置不变//如,输入Wor#d,输出Wdo#r//快速排序实现void QuickStrSort(char str[], int left, int right) { char pivot = str[left]; int i = left, j = right; if (left < right) { while (i < j) { //j从右向左找第一个小于枢纽的字母,如果遇到不是字母的继续向前找 while (i < j && ( (isalpha(str[j]) && str[j] >= pivot) || (!isalpha(str[j])) ) ) j--; str[i] = str[j]; //i从左向右找第一个大于枢纽的字母,遇到不是字母继续向后找 while (i < j && ((isalpha(str[i]) && str[i] <= pivot) || (!isalpha(str[i]))) ) i++; str[j] = str[i]; } str[i] = pivot; QuickStrSort(str, left, i - 1); QuickStrSort(str, i + 1, right); }}int main() { char str[102]; while (1) { cin >> str; QuickStrSort(str, 0, strlen(str) - 1); cout << str << endl << endl;; } return 0;}
冒泡排序
使用类似冒泡排序方法求解:
int main() {string str;getline(cin, str);int i, j;int len = str.length();for (i = 0; i < len - 1; i++) {for (j = 0; j < len - i - 1; j++) {//每趟找到第一个字母,然后找到该字母后的第一个字母//对这两个字母比较大小,若为逆序则交换它们if (isalpha(str[j])) {int k = j + 1;while (!isalpha(str[k]) && k < len - i - 1)++k;if (isalpha(str[k])) {if (str[j] > str[k]) {char temp = str[j];str[j] = str[k];str[k] = temp;}}}}}cout << str << endl;return 0;}
二、另一类型
这个题目根据其规则2:要求同一字母(不区分大小写)按照输入顺序排列;所以不能再使用快速排序,因为快速排序是不稳定的,那么相同字母顺序在排序后可能会改变。
下面是类似冒泡解决方法:
int main(){char str[1000];int i,j,k;int len = 0;char tmp;gets(str);len = strlen(str);for(i = 0; i < len-1; ++i){for(j = 0; j < len-1-i; ++j){k = j;//如果str[j]是一个字母,那么就寻找其后的第一个字母a//找到了,并且a大于str[j]那么就将它们交换if(isalpha(str[j])){while(!isalpha(str[k+1]) && k < len-i-1)k++;if(isalpha(str[k+1]))if(tolower(str[j]) > tolower(str[k+1])){tmp = str[j];str[j] = str[k+1];str[k+1] = tmp;}}}}puts(str);return 0;}
0 0
- 华为2015实习上机:字符串排序
- 华为2013实习上机题
- 华为2017年实习招聘上机题
- 【华为上机】一左一右排序问题
- 华为上机练习题--压缩字符串
- 华为OJ上机-字符串加密
- 华为上机-字符串相关题目
- 2015华为上机笔试
- 字符串排序(2015华为校招)
- 华为OJ_2168_字符串排序
- 华为OJ 字符串排序
- 【华为OJ】字符串排序
- 华为oj 字符串排序
- 华为OJ 字符串排序
- 【华为 OJ 】字符串排序
- 【华为OJ26】字符串排序
- 华为OJ:字符串排序
- 华为OJ--------字符串排序
- HDU 2084 数塔
- 1011. A+B和C (15)
- javascript closure
- linux之间传送文件
- Java中ArrayList与LinkedList的区别
- 华为2015实习上机:字符串排序
- pomelo chatroom
- Git学习笔记(二)---简单的使用
- Linux程序设计(Linux shell编程的例子:获取文件列表)
- Codeforces Round #296 (Div. 2) -----A. Playing with Paper
- 算法导论—哈希
- extra qualification ‘Matrix::’ on member ‘rowTimesCol’
- 黑马程序员_学习笔记泛型
- IntelliJ idea创建spring mvc项目