排序技术

一、排序的基本概念
假设含有n个记录的序列为{r1,r2,…,rn},其相应的关键字分别为{k1,k2,…,kn},需确定1,2,…,n的一种排列p1,p2,…,pn,使其相应的关键字满足kp1≤kp2≤…≤kpn非递减(或非递增)关系,及时地序列称为一个按关键字有序的序列{rp1,rp2,…,rpn},这样的操作就称为排序。
二、排序的分类
1.稳定排序与不稳定排序
稳定排序:对任意一组数据元素序列,使用某种排序算法对它进行按照关键字的排序,若相同关键字的前后位置关系在排序前与排序后保持一致,则称此排序方法时稳定的。
不稳定排序:对任意一组数据元素序列,使用某种排序算法对它进行按照关键字的排序,若相同关键字的前后位置关系在排序前与排序后不能保持一致,则称此排序方法时不稳定的。
三、插入排序
直接插入排序是假定前i个构成的子序列是处于已排序的情况下进行排序的,然后将第i个元素与前i个构成的子序列逆序进行比较,如果是要升序排序,则比较第i个元素是否比j=i-1(i-1需要>=0)的元素大,如果是则第i个元素的位置(即j+1的位置上)保持不动,反之则将j=i-1的元素放置到i的位置,再进行第i个元素与j=i-2(i-2需要>=0)的,依次进行,如果第i个元素刚好比j=i-3大,则将第i个元素插入到j=i-2(即j+1的位置)上!
四、交换排序
利用交换数据元素的位置进行排序的方法称为交换排序。常用的交换排序方法有冒泡排序和快速排序算法。快速排序算法是一种分区交换排序算法。
1.冒泡排序
冒泡排序的定义:冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
思想就是让每一个关键字,都和它后面的每一个关键字比较,如果大则交换,这样第一位置的关键字在一次循环后一定变成最小值。然而缺陷就是,在排序号1和2之后,数字3反而到了最后一位。
2.快速排序
快速排序算法的定义:快速排序算法的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分进行排序,以达到整个序列有序的目的。
快速排序算法的设计
快速排序算法是一种二叉树结构的交换排序方法。设数组a存放了n个数据元素,low为数组的低端下标,high为数组的高端下标,从数组a中任取一个元素作为标准元素,以该标准元素调整数组a中其他各个元素的位置,使排在标准元素前面的元素均小于标准元素,使排在标准元素后面的元素均大于或等于标准元素。这样一次排序过程后,一方面将标准元素放在了未来排好序的数组中该标准元素应位于的位置上,另一方面将数组中的元素以标准元素为中心分成两个子数组,位于标准元素左边子数组中的元素均小于标准元素,位于标准元素右边子数组中的元素均大于或等于标准元素。对这两个子数组中的元素分别再进行方法类似的递归快速排序。算法递归出口条件是low≥high。
五、选择排序
选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。选择排序正如定义所讲,在数组查询出最小值,然后放在此次循环开始位置(前一次循环已经获取比它更小的值放在前面)。简单选择排序就是单纯的从数组中一次一次循环获取到最小值,放到循环位置。而堆排序正如名字,是从一个堆中选择,然后放在堆的循环开始位置,所以重点就是如何争取获取堆(分组)。
堆排序:堆排序是首先引入完全二叉树的概念,就是构建完全二叉树,前提是完全二叉树是有特点的,也就是大根堆和小根堆。
时间复杂度分析:堆维护一次的复杂度为元素最大可能移动次数,即树高,所以为O(lgn)。建初堆复杂度为 调整以每个分支节点为根节点的子树时的最大可能移动次数 的和,可以假定完全二叉树是满的,则易求出和为O(n)。上面提到了堆的建立和维护,其实质是堆顶元素的“下沉”,除之外,堆的操作还有删除、插入操作:删除(即删除堆顶元素)通常是直接将堆末元素放到堆顶然后对之维护,也是“下沉”;插入通常是将元素插入到序列末尾然后将该元素“上浮”。
六、归并排序
归并排序原理
  归并排序(Merging Sort)就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列,再两两归并,直至得到一个长度为n的有序序列为止,这种排序方法成为2路归并排序。
七、分配排序
基数排序:一个数的序列,每个数为d位r进制数,从末位到首位每次以该位数为关键字进行排序,进行d趟。稳定排序。复杂度:时间平均O(d(r+n)),最好、最坏均如是; 空间O(r+n)。实际上复杂度与实现有关,这里对P349的实现而言。是桶排序的扩展,桶排序:设m个桶(m≥n),采用相同原则将每个元素对应到某个桶(如对应到元素值与桶下标值相等的桶中),然后顺序遍历桶即得到排序序列。时间复杂度为O(m+n)、空间复杂度为O(m)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值