• 快速排序


    前阵子参加了一个面试,被问到假设有一个数组 

    int[] arr = new int[] { 7, 2, 4, 6, 0, 0, 0, 1, 6 };

    需要删除数组内小于1的数,限制条件分别有:

    Ⅰ 不能采用遍历当前数组,复制符合条件的数字到新开辟数组的方式

    Ⅱ 不能采用遍历当前数组,删除不符合条件的数字并把之后数字前移的方式

    当时唯一想到便是快速排序的做法,以1为参照,把数组内的数据分开,然后截取,最终发生了两个悲剧的事情:

    ㈠ 出题人表示不但要分开,还必须保持原顺序

    ㈡ 竟然忘记快速排序是如何运作

    这是一件十分丢人的事情,工作中几乎用不到算法,面试需要时才临时抱佛脚地找点程序看看,到最终害死自己。时至今日,仍然不知道当初的题目应该如何解,虽然被提示使用subList方法。无论如何必须认真复习快速排序,否则这一跤白摔了。

    package algorithms.test;
    
    /**
     * 快速排序的测试
     * 
     * @author super
     */
    public class QuickSort {
        public int[] arr = new int[] { 7, 2, 4, 6, 0, 0, 0, 1, 6 };
    
        public int[] sort2(int[] datas, int low, int high) {
            int i = low, j = high, key = datas[low], tmp;
            while (i < j) {
                while (i < j && datas[j] >= key) {
                    j--;
                }
                while (i < j && datas[i] < key) {
                    i++;
                }
                if (i < j) {
                    tmp = datas[i];
                    datas[i] = datas[j];
                    datas[j] = tmp;
                }
            }
            if (i - low > 0) {
                sort2(datas, low, i);
            }
            if (high - i > 1) {
                sort2(datas, i + 1, high);
            }
            return datas;
        }
    
        /**
         * 测试主方法
         * 
         * @param args
         */
        public static void main(String args[]) {
            QuickSort q = new QuickSort();
            int[] t = q.arr;
            q.sort2(t, 0, t.length - 1);
            for (int i = 0; i < t.length; i++) {
                System.out.print(t[i] + "	");
                if ((i + 1) % 10 == 0) {
                    System.out.println();
                }
            }
        }
    }
  • 相关阅读:
    RHCE考试要求
    c语言:md5函数
    c语言:计算输入字符个数
    IP数据报之Internet Header Length
    常用的tar和rpm命令参数
    Oracle数据库实例的创建、删除、修改【转载】
    Internal类或Internal成员讲解
    序列化与反序列化 BinaryFormatter.Serialize 方法 (Stream, Object)
    oracle网络配置listener.ora、sqlnet.ora、tnsnames.ora
    Oracle启动模式及其常见问题探讨
  • 原文地址:https://www.cnblogs.com/hiver/p/3353351.html
Copyright © 2020-2023  润新知