排序的相关概念
来源:互联网 发布:小微企业的税务数据 编辑:程序博客网 时间:2024/06/14 13:27
排序:假设含有n个记录的序列为{r1, r2, ……, rn},其相应的关键字分别为{k1, k2, ……, kn},需确定1,2,……, n的一种排列p1, p2……, pn,使其相应的关键字满足kp1<=kp2……<=kpn非递减(非递增)关系,即使得序列成为一个关键字有序的序列{rp1, rp2, ……, rpn},这样的操作就称为排序。
多个关键字排序最终都可以转化为单个关键字的排序。下面讨论的是单个关键字的排序。
排序的稳定性:假设ki=kj(1<=i<=n, 1<=j<=n, i != j),且在排序前的序列中ri领先于rj(即i<j)。如果排序后ri仍领先于rj,则称所用的排序方法是稳定的;反之,若可能使得排序后的序列中rj领先于ri,则称所用的排序方法是不稳定的。
内排序与外排序:
内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。
外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存知己多次交换数据才能进行。
排序算法的性能主要受3个方面的影响:时间性能,辅助空间,算法的复杂性。
根据排序过程中借助的主要操作,内排序分为:
插入排序:直接插入排序、希尔排序
交换排序:冒泡排序、快速排序
选择排序:简单选择排序、堆排序
归并排序
按照算法的复杂度分为两大类,冒泡排序,简单选择排序和直接插入排序属于简单算法,,而希尔排序,堆排序,归并排序,快速排序属于改进算法。
排序用到的结构和函数:
先提供一个用于排序的顺序表结构:
#define MAXSIZE 10//用于要排序数组个数最大值,可根据需要修改typedef struct {int r[MAXSIZE + 1];//用于存储要排序数组,r[0]用作哨兵或临时变量int length;//用于记录顺序表的长度} SqList;
由于排序最最常用的操作就是数组两元素的交换:
//交换L中数组r的下标为i和j的值void swap(SqList *L, int i, int j){int temp = L->r[i];L->r[i] = L->r[j];L->r[j] = temp;}
7种算法的对比
排序方法平均情况最好情况最坏情况辅助空间稳定性冒泡排序O(nxn)O(n)O(nxn)O(1)稳定简单选择排序O(nxn)O(nxn)O(nxn)O(1)稳定直接插入排序O(nxn)O(n) O(nxn)O(1)稳定希尔排序O(nlogn)~O(nxn)O(n1.3)O(nxn)O(1)不稳定堆排序O(nlogn)O(nlogn)O(nlogn)O(1)不稳定归并排序O(nlogn)O(nlogn)O(nlogn)O(n)稳定快速排序O(nlogn)O(nlogn)O(nxn)O(logn)~O(n)不稳定
0 0
- 排序的相关概念
- 排序算法相关概念
- PPC的相关概念
- 线程的相关概念
- Spring的相关概念
- UAC相关的概念
- porlet 的相关概念
- JVM的相关概念
- 股票的相关概念
- CVS的相关概念
- 随机数的相关概念
- JVM的相关概念
- 进程相关的概念
- blast的相关概念
- onvif 的相关概念
- AJAX的相关概念
- XML的相关概念
- 数据仓库的相关概念
- iOS多线程编程Part 3/3 - GCD
- Hive日期格式转换用法
- POJ 3264 Balanced Lineup (RMQ线段树)
- 写c的mexFunction函数,供matlab使用
- Kinect的第一个实验OPenNI+OpenCV2
- 排序的相关概念
- _IO, _IOR, _IOW, _IOWR 宏的用法与解析
- SqlServer 中 partition by 的用法
- shell中$(( ))与$( )还有${ }的区别
- 两个网站优化中内部关键词优化的问题
- Hdu3231 step5.2.7 Box Relations(拓扑排序)
- 五十九 struct ifreq结构体与ip,子网掩码,网关等信息
- eclipse中使用公共库出现错误
- Spring中IoC的入门实例