一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
来源:互联网 发布:人种 知乎 编辑:程序博客网 时间:2024/06/02 06:08
一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。思路:先进行字符串排序,用堆排序,按降序排列,排列依据字母对应的ascii值。排序之后按字符类别进行翻转。时间复杂度O(nlogn)
#include<string>#include<iostream>using namespace std;void swap(char* a, char* b) {char temp = *a;*a= *b;*b = temp;}void heapAdjust(char* str, int i, int length) {int lchild = 2 * i + 1;int rchild = 2 * i + 2;int minIndex;if (lchild < length && str[lchild] < str[i])minIndex = lchild;elseminIndex = i;if (rchild < length && str[rchild] < str[minIndex])minIndex = rchild;if (minIndex != i) {swap(str + i, str + minIndex);heapAdjust(str, minIndex, length);}}void heapSort(char* str, int length) {int i;for (i = length / 2; i >= 0; i--)heapAdjust(str, i, length);for (i = length - 1; i > 0; i--) {swap(str + i, str + 0);heapAdjust(str, 0, i);}}void revserStr(char* pStart, char* pEnd) {char charTemp;while (pStart < pEnd) {charTemp = *pStart;*pStart = *pEnd;*pEnd = charTemp;pStart++;pEnd--;}}void rearrangeStr(char* pStr, int length) {heapSort(pStr, length);int i, startIndex = 0, endIndex = -1;for (i = 0; i < length; i++) {if (pStr[i] >= 'a' && pStr[i] <= 'z') {endIndex++;} else {break;}}if (endIndex > startIndex)revserStr(pStr + startIndex, pStr + endIndex);startIndex = endIndex + 1;for (; i < length; i++) {if (pStr[i] >= 'A' && pStr[i] <= 'Z') {endIndex++;} else {break;}}if (endIndex > startIndex)revserStr(pStr + startIndex, pStr + endIndex);startIndex = endIndex + 1;for (; i < length; i++) {if (pStr[i] >= '0' && pStr[i] <= '9') {endIndex++;} else {break;}}if (endIndex > startIndex)revserStr(pStr + startIndex, pStr + endIndex);}int main(int argc, char* argv[]) {char str[] = "MDEXE098FGH453a4cf9";int length = strlen(str);rearrangeStr(str, length);cout << str << endl;cin.get();return 0;}
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。
- 输入一个字符串,内有数字和非数字字符,例如:ab123fk456 98dds153?145f .将其中连续的数字字符作为一个整数,依次存放到一个整型数组a中。例如:123放在a[0],4
- 假设一个数组A[n]数据均为整形,设计一个O(n)的算法,实现将所有奇数放在数组左侧,所有偶数放在右侧
- 将数组中所有小于或等于0的元素都放在数组前面,大于0的元素放在数组后面。要求时间复杂度为o(n)
- 从键盘输入一个字符串放在字符数组…
- 统计一个字符在字符数组中的所有位置
- 按要求打印字符数组中所有可能的字符组合
- 汇编程序:已知有一字符串STR,以'$'为结束标志,编写程序,把STR的内容复 制到NEW_STR中? 要求复制时(1)滤去所有非英文字符;(2)把大写字母变成小写;(3)统计新字符的长度放在NUM中
- 将数组中所有小于或等于0的元素都放在数组前面,大于0的元素放在数组后面
- 将数组中所有小于或等于0的元素都放在数组前面,大于0的元素放在数组后面
- 一道经典面试题,字符数组排序问题(字符包含a-z、A-Z、0-9.)
- 在一个字符串中删除指定的字符 & 删除字符串中所有出现在另一个字符数组中的字符
- RGB排序,一个字符串,里面只有三种字符R G B,所有的R都在G的前面,所有的G都在B的前面。将给定字符串按照此规律排序。要求不允许用辅助空间,复杂度控制在O(N)。
- )RGB排序,一个字符串,里面只有三种字符R G B,所有的R都在G的前面,所有的G都在B的前面。将给定字符串按照此规律排序。要求不允许用辅助空间,复杂度控制在O(N)。遍历一遍就排好序。
- 100.字符串中奇数位置字符和ASCII为偶数的字符放在字符数组t中
- 输入一串字符,要求数字从小到大,字母从a到z排序,输出字母和数字的排序结果。
- AChartEngine用法介绍及实例
- Java中堆与栈的区别分析
- session_start(): Failed to initialize storage module 解决办法
- 如何限定QTextEdit中字数的个数
- octopress博客搭建和个性化配置
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
- 简单缓存实现
- OCX控件的注册卸载,以及判断是否注册
- 设置ScrollView的圆角
- 无题
- Vmware虚拟机下三种网络模式配置
- Python 调用C
- python3实现的多线程httpserver
- c语言中关于圆括号中以逗号赋值