排序概述

所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下:

输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn

输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。

1.被排序对象--文件

被排序的对象--文件由一组记录组成。

记录则由若干个数据项(或域)组成。其中有一项可用来标识一个记录,称为关键字项。该数据项的值称为关键字(Key)。

注意:

在不易产生混淆时,将关键字项简称为关键字。

2.排序运算的依据--关键字

用来作排序运算依据的关键字,可以是数字类型,也可以是字符类型。

关键字的选取应根据问题的要求而定。

【例】在高考成绩统计中将每个考生作为一个记录。每条记录包含准考证号、姓名、各科的分数和总分数等项内容。若要惟一地标识一个考生的记录,则必须用"准考证号"作为关键字。若要按照考生的总分数排名次,则需用"总分数"作为关键字。

衡量排序算法的指标:

  • 时间复杂度:主要分析关键字的比较次数和记录的移动次数;
  • 空间复杂度:分析排序算法中需要多少辅助内存;
  • 稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种算法是稳定的;反之就是不稳定的。

分类

  • 内部排序:排序过程不需要借助外部存储器(如磁盘等),所有排序都是在内存中完成;
  • 外部排序:排序过程需要借助于外部存储器,特别是数据量非常大时;
    • 外部排序最常用的算法就是多路归并排序,即将源文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序,接下来再对多个有序的子文件进行归并排序。

排序概述

时间: 2024-11-03 05:33:50

排序概述的相关文章

普林斯顿公开课 算法2-1:排序概述

目标 对所有类型的数据进行排序. 问题 排序函数如何知道比较的是哪种类型的数据呢? 回调函数 这时候就需要引入回调函数的概念了.回调函数就是将可执行的代码作为参数进行传递. 实现回调的方法 在Java中可以通过接口来实现,在C语言中可以通过函数指针来实现,C++中可以通过class-type functor,也就是重载操作符operator ()的类,在C#中可以使用Delegate委托,在Python/Perl/ML/javascript中可以直接传递函数. JDK中提供了Comparable

排序概述(c语言)

排序问题可以说是算法入门中的入门了,可尽管如此,算法这个东西还是让许多初学者伤透了脑筋(such as me~).But,然而,但是,排序小结来了(基于c语言),希望能给读者包括笔者本身带来理解上的新体验. 1.冒泡排序. 所谓冒泡排序,从字面就可大体了解,对一系列数,对满足条件的数,让其依次"冒泡浮出".其基本思路是:每次将相邻两个数进行比较,将小的数(或大的数,看你需要逆序还是顺序)调到前头去.这样,假如有6个数,我们第一次检索这六个数,找出最小的放在第一个位置上:再进行下一次检索

4.1 排序概述

1 #include <stdlib.h> 2 int CreateData(int arr[],int n,int min,int max) //创建一个随机数组,a保存生成的数据,n为数组元素的数量 3 { 4 int i,j,flag; 5 srand(time(NULL)); 6 if((max-min+1)<n) return 0; //最大数与最小数之差小于产生数组的数量,生成数据不成功 7 for(i=0;i<n;i++) 8 { 9 do 10 { 11 arr[i

算法手记(5)初级排序算法

排序是将一组对象按照一定的规则重新排列的过程.即使目前完全可以使用标准库中的排序函数,学习排序算法仍然有着较大意义:   排序算法的学习可以帮助你全面了解比较算法性能的方法: 类似的技术上能有效解决其他类型的问题: 排序算法通常是我们解决问题的第一步: 更重要的是这些算法都很经典,优雅和高效. 排序在商业数据处理分析和现代科学中占有重要的地位,其中快速排序算法被誉为20世纪科学和工程领域十大算法之一.今天我们要看的就是相对简单但很经典的初级排序算法,包括选择排序,插入排序及Shell排序. 准备

转载 排序

目录(?)[+] 概述 实现步骤 实现性能 Java实现 选择排序 简单选择排序 简单选择排序性能 简单选择排序Java实现 概述 实现过程 实现效率 Java实现 概述 效率 迭代实现 实现原理 Java代码 递归实现 实现原理 Java代码 基本思想 排序效率 Java实现 浅析堆 Java代码实现 概念 性能 java实现 原理 效率 Java实现 概述 直接插入排序 Java实现 效率分析 折半插入排序 Java实现 1 快排的partition函数 冒泡排序的改进 快排优化 一.对比分

每日一题32:排序

排序概述 排序用途广泛,比如为数据库查询结果按时间排序,最小生成树算法中对边按权重排序,背包问题中对物品按大小排序等等.排序算法有很多,本文主要记录了冒泡排序.插入排序.快速排序.选择排序.堆排序.归并排序等几种比较流行的算法. 冒泡排序 //冒泡排序,对数组做n-1趟扫描,每一趟把未就位的元素中的最大的元素 //放到他正确的位置上,每一趟扫描从输入数组第一个元素开始,依次与 //它后一个元素比较,如果大于后一元素就交换两者,无论交换与否,在 //这一趟的最大元素到达他应该在的位置之前,从原来后

9.2.2 hadoop全排序实例详解

1.1.1         全排序 (1)全排序概述 指的是让所有的输出结果都是有序的,最简单的方法就是用一个reduce任务,但是这样处理大型文件时效率极低,失去的并行架构的意义.所以可以采用分组排序的方法来实现全局排序,例如现在要实现按键的全局的排序,可以将键值按照取值范围分为n个分组,<-10℃,-10℃~0℃, 0℃~10℃,>10℃.实现partitioner类,创建4个分区,将温度按照取值范围分类到四个分区中,每个分区进行排序,然后将4个分区结果合并成一个,既是一个全局有序的输出.

WritableComparable(排序)

一:排序概述 排序时是MapReduce框架最重要的操作之一 MapTask和ReduceTask均会对数据按照key进行排序,该操作是属于Hadoop的默认行为.任何应用程序中的数据均会被排序,不管你是否需要. 默认排序是按照字典顺序排序,实现该排序的方法是快速排序 二:排序分类 (1)全排序 只输出一个结果文件就是全排序 (2)部分排序 就是有多个结果文件. (3)辅助排序(GroupingComparator分组) 在Reduce端进行分组.应用于:在接受的key是bean对象时,想让一个

朝花夕拾之数据结构

绪论 线性表 栈和队列 串 数组和广义表 树和二叉树 图 动态存储管理 查找  静态查找表 顺序表的查找 有序表的查找 静态树的查找 索引顺序表的查找 动态查找表 二叉排序树和平衡二叉树 B_ 内部排序 概述 插入排序 直接插入排序 其他插入排序 希尔排序 快速排序 选择排序 简单选择排序 树形选择排序 堆排序 归并排序 技术排序        多关键字的排序 链式基数排序 各种内部排序的比较讨论 外部排序 外存信息的存取 外部排序的方法 多路平衡归并的实现 置换-选择排序 文件  有关文件的基