算法题:字符串排序
来源:互联网 发布:java语言程序设计基础 编辑:程序博客网 时间:2024/06/06 21:49
/*一个字符数组,里面的字符可能是a - z、A - Z、0 - 9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。*/#include <iostream>#include <string.h>using namespace std;void Swap(char &a, char &b){ char temp = a; a = b; b = temp;}void Grial(char *&str, int low, int high){ if (low >= high) return; int i = low - 1; int j = low; while (j < high) { while (str[high]>str[j])j++; i++; if (i != j) Swap(str[i], str[j]); j++; } i++; if (i != high) Swap(str[i], str[high]); Grial(str, low, i - 1); Grial(str, i + 1, high);}void Swap(char *p1, char *p2){ while (p1 < p2) { Swap(*p1, *p2); p1++; p2--; }}void Grial(char *&str){ //因为a-z对应的ASCLL表中的值是大于A-Z,A-Z又大于 //0-9,所以先让整体排列成z-aZ-A9-0的形式,然后局部翻转, //达到最终的结果。 //选择快排使它有序。 int n = strlen(str) - 1; Grial(str, 0, n); //此时已经整体有序,在进行局部调整。 char *p = str; while (*p>=97) { p++; } char *q = p; Swap(str,p-1); while (*q < 97 && *q >= 65) { q++; } Swap(p,q-1); p = q; while (*(q+1) != '\0') { q++; } Swap(p,q);}int main(){ char *s = new char[100]; strcpy(s, "1321312796543aDAAABBBBDDDDacdddccaa"); cout << s << endl; Grial(s); cout << s << endl; return 0;}
0 0
- 算法题:字符串排序
- 字符串排序等算法
- 简易字符串排序算法
- 十九、字符串排序算法
- 字符串排序算法概述
- 字符串按规则排序算法
- 排序算法总结(包含字符串排序算法)
- 排序算法总结(包含字符串排序算法)
- 算法题/排序算法
- 【VB.NET】字符串数组长度排序算法
- 快速排序算法在字符串数组排序中的应用
- [编程题]字符串排序
- 字符串排序-变形题
- 冒泡排序算法 排序 数字字符串,并返回排序后的字符串
- 算法#12--详解各种字符串排序算法和代码实现
- 排序算法题
- 算法题-ASCII排序
- 【算法题】选择排序
- 聚类算法(2)——谱聚类、Chameleon聚类
- 编程之美:第四章 数字之趣 4.3买票找零
- FLOYD算法
- 【YII2学习笔记】20150801-1
- 欢迎使用MarkdownPad 2
- 算法题:字符串排序
- android focus 查找
- LeetCode—二叉树的建立
- HDU 1237:简单计算器【栈】
- k2pdfopt详细教程-让kindle看遍所有pdf
- 生的咖啡让你果然那个人卡股份
- 编程之美:第四章 数字之趣 4.4点是否在三角形内
- 基本排序方法之二——快速排序
- 句柄泄露调试