zoukankan      html  css  js  c++  java
  • 排序与搜索一览

     一。 归并排序

    O(nlogn)的时间复杂度的排序方法中,稳定的只有归并排序,堆排序和快速排序都是不稳定的。

    在数组长度比较短的情况下,不进行递归,而是选择其他的排序方案,比如插入排序。

    /**
         * Algorithm of mergeSort
         * @param nums
         */
        public void mergeSort(int[] nums) {
            mergeSortHelp(nums, 0, nums.length-1);
        }
        
        public void mergeSortHelp(int[] nums, int low, int high) {
            if(low >= high)
                return;
            int mid = (low + high) / 2;
            mergeSortHelp(nums, low, mid);
            mergeSortHelp(nums, mid+1, high);
            merge(nums, low, mid, high);
        }
        
        public void merge(int[] nums, int low, int mid, int high) {
            int[] copy = new int[nums.length];
            int s1 = low, s2 = mid+1;
            int t = low; //the index of copy
            while(s1 <= mid && s2 <= high) {
                if(nums[s1] <= nums[s2])
                    copy[t++] = nums[s1++];
                else 
                    copy[t++] = nums[s2++];
            }
            while(s1 <= mid) 
                copy[t++] = nums[s1++];
            while(s2 <= high)
                copy[t++] = nums[s2++];
            for(int i=low; i<=high; i++) 
                nums[i] = copy[i];
            
        }

    二。 外排序(External sorting)

    • 外排序是指处理超过内存限制的数据的排序算法。通常是讲中间结果放在读写较慢的外存储器(一般是硬盘)上;
    • 一般采取的策略是“排序-归并”策略:
      • 排序阶段,读入能放在内存中的数据量,将其排序输出带临时文件,一次进行,将待排序数据组织为多个有序的临时文件;
      • 归并阶段,将这些临时文件组合为大的有序文件。
      • 如,使用100M的内存对900M的数据进行排序:
        • 读入100M的数据至内存,用常规方式(如堆排序)进行排序;
        • 将排序后的数据写入硬盘;
        • 重复两个步骤,得到9个100M的块中;
        • 将100M的内存划分为10份,前9份为输入缓冲区,第10份为输出缓冲区。如前9分各8M,第10份18M;
        • 执行九路归并算法,将结果输出到输出缓冲区:
          • 若输出缓冲区满,将数据写至目标文件,并清空缓冲区;
          • 若输入缓冲区空,则读入相应文件的下一份数据。

    ---恢复内容结束---

  • 相关阅读:
    我眼中的SCRUM
    文本转换程序
    免费接口
    看板,敏捷的另一种实现方式
    Android Asynchronous Http Client-Android异步网络请求客户端接口
    hdu4753 Fishhead’s Little Game 状态压缩,总和一定的博弈
    dbcp、c3p0、jdbc常用连接配置
    IE安全分析
    redis入侵小结
    heartbleed漏洞利用
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/5515515.html
Copyright © 2011-2022 走看看