论坛的一个问题
对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“X
man”,“little”,“During”,“day”能够排序成
“Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Hello”,也就是说,在排序的过程并不是传统的
按照字符串排序,在排序中还需要将小写字母一并排序,也就是说a字符串要在B或b之前。
- import java.util.Arrays;
import java.util.Comparator;
/**
* 微软面试题-按照字母排序.<br>
* 小写字母在大写后面,字母B/b在字母A/a后面<br>
*
* @author 老紫竹 JAVA世纪网(java2000.net)
*
*/
class T {
private static final int MASK = 0xFFDF; // 用来把小写变成大写
public static int compare(String o1, String o2) {
int length1 = o1.length();
int length2 = o2.length();
int length = length1 > length2 ? length2 : length1;
int c1, c2;
int d1, d2;
for (int i = 0; i < length; i++) {
c1 = o1.charAt(i);
c2 = o2.charAt(i);
d1 = c1 & MASK;
d2 = c2 & MASK;
if (d1 > d2) {
return 1;
} else if (d1 < d2) {
return -1;
} else {
if (c1 > c2) {
return 1;
} else if (c1 < c2) {
return -1;
}
}
}
if (length1 > length2) {
return 1;
} else if (length1 < length2) {
return -1;
}
return 0;
}
public static void sortByPOPO(String[] args) {
String tmp;
for (int i = 0; i < args.length; i++) {
for (int j = i + 1; j < args.length; j++) {
if (compare(args[i], args[j]) > 0) {
tmp = args[i];
args[i] = args[j];
args[j] = tmp;
}
}
}
// [Ad, aC, Bc, During, day, Hello, little, X man]
System.out.println(Arrays.toString(args));
}
public static void main(String[] args) {
String[] strs = { "Bc", "Ad", "aC", "Hello", "X man", "little", "During",
"day" };
sortByPOPO(strs);
}
}
我之所以用Arrays.sort是为何简化排序算法。既然大家没看懂我的意思,我就用最XX的冒泡算法排序算了。
其实此问题的关键在于比较算法的实现,而不在排序算法的实现。
其它的快速排序,Shell排序等,大家自己实现好了,我就不提供了。
JAVA排序算法实现代码-快速(Quick Sort)排序JAVA排序算法实现代码-冒泡(Bubble Sort)排序 JAVA排序算法实现代码-堆(Heap)排序 JAVA排序算法实现代码-选择(Select)式排序JAVA排序算法实现代码-二叉树排序JAVA排序算法实现代码-希尔Shell排序JAVA排序算法实现代码-插入排序
分享到:
相关推荐
### 微软面试题解析 **1. 整数数组中两两之差绝对值最小的值** - **知识点**: 数组处理、排序、比较 - **解析**: 要求解这个问题,首先需要对数组进行排序,然后依次比较相邻元素之间的差值,找到最小的差值即为所...
字符串大小写字母排序** - **题目描述**:将字符串中的所有小写字母排在大写字母前面。 - **解决方案**:可以遍历字符串,分别收集小写字母和大写字母,最后合并结果。 **18. 随机选取关键字** - **题目描述**:...
- `sort()`数组方法默认按字母顺序排序,可以接受一个比较函数作为参数,自定义排序规则。内部机制涉及到比较函数的调用,根据返回值决定元素的相对位置。 - `DIV`元素通常用于布局,可以容纳多个元素;`SPAN`元素...
【微软面试100题】是一份集合了各种智力、逻辑和编程问题的文档,旨在测试应聘者在解决复杂问题、逻辑推理、算法理解和数学应用等方面的能力。以下是一些问题的解析: 1. 为什么下水道的井盖是圆的?—— 因为圆形...
C# 面试题小札 以下是根据给定的文件信息生成的相关知识点: 1. 字符串的 NULL 与空字符串的区别 在 C# 中,`string str = null` 和 `string str = ""` 有着根本的区别。`string str = null` 表示该字符串没有...
【微软面试100题】是一系列用于考察应聘者逻辑思维、问题解决能力和技术知识的题目,涵盖了数学、逻辑推理、计算机科学等多个领域。以下是一些题目的解析: 1. **下水道井盖为什么是圆的?** - 解答:圆形井盖无论...
- **详细解释**:常见的字符串匹配算法包括KMP算法、Boyer-Moore算法等,它们能够在较短的时间内完成模式匹配任务。 #### 27. 颠倒字符串 - **知识点**:字符串操作、迭代法 - **详细解释**:可以通过双指针技术,...
在给定的文档"微软面试题-按照字母排序"中,可能详细讨论了如何对字符串或字符数组进行字母顺序的排序,这在实际应用中常见于文件名排序、数据库查询优化等领域。 2. **多页面传值**:在Web开发中,数据在不同页面...
微软十五道面试题涵盖了多个方面的知识点,包括数组、字符串、函数、链表、二叉树、排序数组等。这些问题要求候选人拥有很强的编程能力和算法设计能力。 * 题目 1:找出两两之差绝对值最小的值 这道题目考察候选人...
字符串常量与字符串数组的区别 ```cpp char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = ...
- **表示**:在大多数编程语言中,字符串通常被表示为字符数组或特殊的数据类型。 ##### 2. 字符串翻转 - **整体翻转**:首先将整个句子翻转,即将所有字符的位置进行逆序排列。 - **单词内部不翻转**:保持每个...
答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的...