`
逆风的香1314
  • 浏览: 1431207 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

微软面试题-字符串数组按照字母排序

阅读更多

论坛的一个问题
对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“X man”,“little”,“During”,“day”能够排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Hello”,也就是说,在排序的过程并不是传统的 按照字符串排序,在排序中还需要将小写字母一并排序,也就是说a字符串要在B或b之前。

  1. 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排序算法实现代码-插入排序


分享到:
评论

相关推荐

    微软google面试题

    ### 微软面试题解析 **1. 整数数组中两两之差绝对值最小的值** - **知识点**: 数组处理、排序、比较 - **解析**: 要求解这个问题,首先需要对数组进行排序,然后依次比较相邻元素之间的差值,找到最小的差值即为所...

    微软、谷歌、百度等公司经典面试100题[第101-170题].pdf

    字符串大小写字母排序** - **题目描述**:将字符串中的所有小写字母排在大写字母前面。 - **解决方案**:可以遍历字符串,分别收集小写字母和大写字母,最后合并结果。 **18. 随机选取关键字** - **题目描述**:...

    一套完整的javascript面试题(含有答案)

    - `sort()`数组方法默认按字母顺序排序,可以接受一个比较函数作为参数,自定义排序规则。内部机制涉及到比较函数的调用,根据返回值决定元素的相对位置。 - `DIV`元素通常用于布局,可以容纳多个元素;`SPAN`元素...

    微软面试100题.doc

    【微软面试100题】是一份集合了各种智力、逻辑和编程问题的文档,旨在测试应聘者在解决复杂问题、逻辑推理、算法理解和数学应用等方面的能力。以下是一些问题的解析: 1. 为什么下水道的井盖是圆的?—— 因为圆形...

    C# 面试题小札 .doc

    C# 面试题小札 以下是根据给定的文件信息生成的相关知识点: 1. 字符串的 NULL 与空字符串的区别 在 C# 中,`string str = null` 和 `string str = ""` 有着根本的区别。`string str = null` 表示该字符串没有...

    微软面试(100)题

    【微软面试100题】是一系列用于考察应聘者逻辑思维、问题解决能力和技术知识的题目,涵盖了数学、逻辑推理、计算机科学等多个领域。以下是一些题目的解析: 1. **下水道井盖为什么是圆的?** - 解答:圆形井盖无论...

    [标题党]微软100面试题

    - **详细解释**:常见的字符串匹配算法包括KMP算法、Boyer-Moore算法等,它们能够在较短的时间内完成模式匹配任务。 #### 27. 颠倒字符串 - **知识点**:字符串操作、迭代法 - **详细解释**:可以通过双指针技术,...

    几个算法、技巧等等等等等

    在给定的文档"微软面试题-按照字母排序"中,可能详细讨论了如何对字符串或字符数组进行字母顺序的排序,这在实际应用中常见于文件名排序、数据库查询优化等领域。 2. **多页面传值**:在Web开发中,数据在不同页面...

    C、C++各大公司面试笔试题

    微软十五道面试题涵盖了多个方面的知识点,包括数组、字符串、函数、链表、二叉树、排序数组等。这些问题要求候选人拥有很强的编程能力和算法设计能力。 * 题目 1:找出两两之差绝对值最小的值 这道题目考察候选人...

    这是我整理的微软C++面试题5

    字符串常量与字符串数组的区别 ```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. 字符串翻转 - **整体翻转**:首先将整个句子翻转,即将所有字符的位置进行逆序排列。 - **单词内部不翻转**:保持每个...

    net学习笔记及其他代码应用

    答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的...

Global site tag (gtag.js) - Google Analytics