数据结构(七)排序---基本概念和分类

一:定义

假设含有n个记录的序列为{r1,r2,.....,rn},其相应的关键字分别为{k1,k2,..,..kn},需确定1,2,….,n的一种排列p1,p2,....,pn,使其相应的关键字满kp1≤kp2≤...≤kpn(非递减或非递增)关系,即使得序列成为一个按关键字有序的序列{rp1,rp2,...,rpn},这样的操作为排序。
在排序问题中,通常将数据元素称为记录,显然我们输入的是一个记录集合,输出的也是一个记录集合,所以说,可以将排序看成是线性表的一种操作。
排序的依据是关键字之间的大小关系,那么对于同一个记录集合,针对不同的关键字进行排序,可以得到不同的序列。
比如,一个班的学生有全部成绩和主科成绩按不同的标准来排序就会有所不同。

二:排序的稳定性

正是由于排序不仅是针对主关键字,那么对于次关键字,所以排序结果可能会不一样,稳定排序所定义的就是排序之后如果一个序列中未排序前Ki=Kj,且是ri领先于rj,,如果排序后ri任是领先于rj,则称所用的排序方法是稳定的;反之若可能使得排序后的序列中rj领先于ri,则称所用的排序方法是不稳定的

就是说在我们未排序之前,数据中可能已经有部分数据是相同的,若是我们排序后,这些相同的数据的先后顺序没有改变,那么就是稳定的,若是我们在排序中,将相同的数据的顺序进行了修改(虽然没啥影响,但是做了多余的操作,而且说明我们的操作对数据的影响较大,不稳定),那么就是不稳定的

三:内排序和外排序

内排序和外排序的区分就是:

排序过程是否全部被放置在内存中。 

定义:

内排序是在整个过程中,待排序的所有记录全部放置在内存中。
外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换数据才能进行。 

影响因素:

1.时间性能:排序算法的时间开销是衡量其好坏的最重要的标识。在内排序中,主要进行两种操作就是比较和移动,所以高效率的内排序算法应该尽可能少的比较和移动次数。
2.辅助空间:存放待排序所占用的存储空间之外和执行算法所需要的其他存储空间
3.算法的复杂性:算法本身的复杂性。

四:排序算法的种类

 按照算法的复杂度分为两大类:

冒泡排序,简单选择排序和直接插入排序属于简单算法
希尔排序,堆排序,归并排序,快速排序属于改进算法

五:结构定义

#define MAXSIZE 10

typedef struct
{
    int r[MAXSIZE + 1];    //添加了哨兵
    int length;
}SqList;
void swap(SqList *L, int i, int j)
{
    int temp = L->r[i];
    L->r[i] = L->r[j];
    L->r[j] = temp;
}

 

posted @ 2018-08-21 09:58  山上有风景  阅读(451)  评论(0编辑  收藏  举报