排序算法之概述

【版权声明:转载请保留出处:blog.csdn.net/algorithm_only。邮箱:[email protected]

排序是计算机程序设计中的一种重要操作。所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下:
  输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。
  输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。

1.被排序对象--文件
  被排序的对象--文件由一组记录组成。
  记录则由若干个数据项(或域)组成。其中有一项可用来标识一个记录,称为关键字项。该数据项的值称为关键字(Key)。

2.排序运算的依据--关键字
     用来作排序运算依据的关键字,可以是数字类型,也可以是字符类型。
     关键字的选取应根据问题的要求而定。
【例】在高考成绩统计中将每个考生作为一个记录。每条记录包含准考证号、姓名、各科的分数和总分数等项内容。若要惟一地标识一个考生的记录,则必须用"准考证号"作为关键字。若要按照考生的总分数排名次,则需用"总分数"作为关键字。

3排序的稳定性

 在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生变化,则称这种排序方法是不稳定的。
4排序方法分类

  • 按是否涉及数据的内、外存交换分
     在排序过程中,若整个文件都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为内部排序(简称内排序);反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。
     ① 内排序适用于记录个数不很多的小文件
     ② 外排序则适用于记录个数太多,不能一次将其全部记录放人内存的大文件。

  • 按策略划分内部排序方法
     可以分为五类:插入排序、选择排序、交换排序、归并排序和分配排序。

通常排序过程进行下列两种基本操作:(1). 比较两个关键字的大小;(2).记录从一个位置移到另一个位置;后一种操作可以改变记录存储方式来避免。待排记录可有3种存储方式:(1).待排记录存放在地址连续的一组存储单元上,类似于线性表的顺序存储结构;(2)待排记录存放在静态链表中,记录之间的次序关系由指针指示,则实现排序不需要移动记录,仅需修改指针即可,这种排序又称(链)表排序;(3)待排序记录本身存储在一组地址连续的存储单元内,同时另设一个指示各个存储记录位置的地址向量,在排序过程中不移动记录本身,而移动地址向量中这些记录的地址,在排序结束之后再按照地址向量中的值调整记录的存储位置,这种排序又称地址排序。在后面所讲到的算法中,待排记录按上述第一种方式存储,且记录关键字为整数。在以后的讨论算法中,记录的数据类型为:

typedef int			keytype;

typedef struct {
	keytype			key;
}datatype;

typedef struct {
	datatype		data[LIST_MAX_SIZE];	
	int			len;
}sqlist;



你可能感兴趣的:(算法,struct,list,存储)