知识大全 排序 - 选择排序 - 直接选择排序
Posted 文件
篇首语:生也有涯,知也无涯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 选择排序 - 直接选择排序相关的知识,希望对你有一定的参考价值。
选择排序(Selection Sort)的基本思想是 每一趟从待排序的记录中选出关键字最小的记录 顺序放在已排好序的子文件的最后
直到全部记录排序完毕
常用的选择排序方法有直接选择排序和堆排序
直接选择排序(Straight Selection Sort)
直接选择排序的基本思想
n个记录的文件的直接选择排序可经过n 趟直接选择排序得到有序结果
①初始状态 无序区为R[ n] 有序区为空
②第 趟排序
在无序区R[ n]中选出关键字最小的记录R[k] 将它与无序区的第 个记录R[ ]交换 使R[ ]和R[ n]分别变为记录个数
增加 个的新有序区和记录个数减少 个的新无序区
……
③第i趟排序
第i趟排序开始时 当前有序区和无序区分别为R[ i ]和R[i n]( ≤i≤n ) 该趟排序从当前无序区中选出关键字最小
的记录R[k] 将它与无序区的第 个记录R[i]交换 使R[ i]和R[i+ n]分别变为记录个数增加 个的新有序区和记录个数减少
个的新无序区
这样 n个记录的文件的直接选择排序可经过n 趟直接选择排序得到有序结果
直接选择排序的过程
对初始关键字为 和 的文件进行直接选择排序的过程【 参见动画演示 】
算法描述
直接选择排序的具体算法如下
void SelectSort(SeqList R)
int i j k;
for(i= ;i
k=i;
for(j=i+1;j<=n;j++) //在当前无序区R[i..n]中选key最小的记录R[k]
if(R[j].key
k=j; //k记下目前找到的最小关键字所在的位置
if(k!=i) //交换R[i]和R[k]
R[0]=R[i];R[i]=R[k];R[k]=R[0]; //R[0]作暂存单元
//endif
//endfor
//SeleetSort
4、算法分析
(1)关键字比较次数
无论文件初始状态如何,在第i趟排序中选出最小关键字的记录,需做n-i次比较,因此,总的比较次数为:
n(n-1)/2=0(n 2 )
(2)记录的移动次数
当初始文件为正序时,移动次数为0
文件初态为反序时,每趟排序均要执行交换操作,总的移动次数取最大值3(n-1)。Tw.WINgWIT.
直接选择排序的平均时间复杂度为O(n 2 )。
(3)直接选择排序是一个就地排序
(4)稳定性分析
直接选择排序是不稳定的
【例】反例[2, 2 ,1]
cha138/Article/program/sjjg/201311/23782相关参考
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
直接选择排序Java实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Aboutthisapp
排序是组织数据最基本的运算排序的方法也很多本章给出了几种典型的排序方法见下表 排序类别插入排序交换排序选择排序归并排序分配排序 排序方法直接插入冒泡法直接选择*归并排序箱排序 希尔排序*快速
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方法中哪些
堆排序 堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征使得在当前无序区中选取最大(或最小)关键字的记录变得 简单 ()用大根堆排序的基本思想 ①先将初始文件R[n]建
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方法中哪些
()BuildHeap和Heapify函数的实现 因为构造初始堆必须使用到调整堆的操作先讨论Heapify的实现 ①Heapify函数思想方法 每趟排序开始前R[li]是以R[]为根的堆在R