排序与搜索一览

一。 归并排序

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;
      • 执行九路归并算法,将结果输出到输出缓冲区:
        • 若输出缓冲区满,将数据写至目标文件,并清空缓冲区;
        • 若输入缓冲区空,则读入相应文件的下一份数据。

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

时间: 2024-10-10 06:19:37

排序与搜索一览的相关文章

MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页

文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-pagedlist.html 系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (10) 数据查询页面 源码下载:点我下载 目录 前言 排序 搜索 分页 结尾 前言 上一节我们做到了如下的一个基础查询页面.本节我们向这个页面中加入排序.搜索和分页功能. 排序 从上图中的地址栏中可以看到

数据结构-4-Trie树:应用于统计、排序与搜索 原理详解

Trie树:应用于统计.排序和搜索 1. trie树定义 1.Trie树 (特例结构树) Trie树,又称单词查找树.字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高. Trie的核心思想是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的. Trie树也有它的缺点,Trie树的内存消耗非

ngTbale真分页实现排序、搜索等功能

一. 真分页表格基础 1. 需求:分页,排序,搜索都是需要发API到服务端. 2. JS实现代码: getStorage是localStorage一个工具方法,可以自己写这个方法. API参数如下: { limit: initItemCountPerPage, index: options1.page, sortKey: options1.sortKey ? encodeURIComponent(options1.sortKey) : '', sortType: options1.sortTyp

go语言的排序和搜索

晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜索 search 也是.c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便: c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便.go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c

数据结构与算法 - 排序与搜索

排序与搜索 排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法. 1.冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 冒泡排序算法的运作如下: 比较相邻的元素.如果第一个比第二个大(升序),就

python 排序与搜索

python 排序与搜索 学习了一下排序与搜索,做一下总结.如果那里不对,请多指教. 排序算法:是一种能将一串数据依照特定顺序进行排列的一种算法. 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序.也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 例如   (1,3)(2,3)(1,2)(2,1)进行排序 冒泡排序: 比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个.持续每次对越来越少的元素重复

排序和搜索

排序与搜索 排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法. 排序算法的稳定性 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序.也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题.然而,假设以下的数对将要以他们的第一个数字来排序. (4, 1) (3, 1) (3, 7)(5, 6) 在这个状

[算法小练][图][拓扑排序+深度优先搜索] 平板涂色问题

说在前面 本题是一道经典题目,多做经典题目可以节省很多学习时间,比如本题就包含了许多知识:回溯+剪枝+拓扑排序+深度优先搜索.[动态规划方法另作讨论] 关键代码 题: CE数码公司开发了一种名为自动涂色机(APM)的产品.它能用预定的颜色给一块由不同尺寸且互不覆盖的矩形构成的平板涂色. 为了涂色,APM需要使用一组刷子.每个刷子涂一种不同的颜色C.APM拿起一把有颜色C的刷子,并给所有颜色为C且符合下面限制的矩形涂色: 为了避免颜料渗漏使颜色混合,一个矩形只能在所有紧靠它上方的矩形涂色后,才能涂

4-1 排序与搜索

排序与搜索 排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法. 排序算法的稳定性 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序.也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题.然而,假设以下的数对将要以他们的第一个数字来排序. (4, 1) (3, 1) (3, 7)(5, 6) 在这个状