知识大全 排序 - 交换排序 - 冒泡排序(二)
Posted 知
篇首语:恢弘志士之气,不宜妄自菲薄。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 交换排序 - 冒泡排序(二)相关的知识,希望对你有一定的参考价值。
算法分析
( )算法的最好时间复杂度
若文件的初始状态是正序的 一趟扫描即可完成排序 所需的关键字比较次数C和记录移动次数M均达到最小值
C min =n
M min =
冒泡排序最好的时间复杂度为O(n)
( )算法的最坏时间复杂度
若初始文件是反序的 需要进行n 趟排序 每趟排序要进行n i次关键字的比较( ≤i≤n ) 且每次比较都必须移动记录三次
来达到交换记录位置 在这种情况下 比较和移动次数均达到最大值
C max =n(n )/ =O(n )
M max = n(n )/ =O(n )
冒泡排序的最坏时间复杂度为O(n )
( )算法的平均时间复杂度为O(n )
虽然冒泡排序不一定要进行n 趟 但由于它的记录移动次数较多 故平均时间性能比直接插入排序要差得多
( )算法稳定性
冒泡排序是就地排序 且它是稳定的
算法改进
上述的冒泡排序还可做如下的改进
( )记住最后一次交换发生位置lastExchange的冒泡排序
在每趟扫描中 记住最后一次交换发生的位置lastExchange (该位置之前的相邻记录均已有序) 下一趟排序开始时
R[ lastExchange ]是有序区 R[lastExchange n]是无序区 这样 一趟排序可能使当前有序区扩充多个记录 从而减少排
序的趟数 具体算法【参见习题】
( ) 改变扫描方向的冒泡排序
①冒泡排序的不对称性
能一趟扫描完成排序的情况
只有最轻的气泡位于R[n]的位置 其余的气泡均已排好序 那么也只需一趟扫描就可以完成排序
【例】对初始关键字序列 就仅需一趟扫描
需要n 趟扫描完成排序情况
当只有最重的气泡位于R[ ]的位置 其余的气泡均已排好序时 则仍需做n 趟扫描才能完成排序
【例】对初始关键字序列 就需七趟扫描
②造成不对称性的原因
每趟扫描仅能使最重气泡 下沉 一个位置 因此使位于顶端的最重气泡下沉到底部时 需做n 趟扫描
③改进不对称性的方法
cha138/Article/program/sjjg/201311/23796相关参考
交换排序的基本思想两两比较待排序记录的关键字发现两个记录的次序相反时即进行交换直到没有反序的记录为止 冒泡排序 冒泡排序将当前未排序的记录自上而下依次对相邻的两个记录进行比较若为逆序则
划分算法Partition ()简单的划分方法 ①具体做法 第一步(初始化)设置两个指针i和j它们的初值分别为区间的下界和上界即i=lowi=high;选取无序区的第一个记录 R[i](即
今天我回顾了一下原来的排序方法现在分享如下冒泡排序两种实现方式一个是直接实现如下 int[]a=; inttemp=; for(inti=;ia[j+]) temp=a[j]; a[
排序是组织数据最基本的运算排序的方法也很多本章给出了几种典型的排序方法见下表 排序类别插入排序交换排序选择排序归并排序分配排序 排序方法直接插入冒泡法直接选择*归并排序箱排序 希尔排序*快速
知识大全 PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
PHP冒泡排序二分查找顺序查找二维数组排序算法函数的详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
简单介绍C#冒泡排序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 今天主要是将排序算法中最简单
Java冒泡排序法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! publicclassMySo
堆排序 堆的定义n个元素的序列kk…kn)当且仅当满足以下关系时称之为堆 若将和序列kk…kn)对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二
快排 <?php functionquicksort($str) if(count($str)<=)return$str;//如果个数不大于一直接返回 $key=$str[];
快速排序(QuickSort) 算法思想 快速排序是CRAHoare于年提出的一种划分交换排序它采用了一种分治的策略通常称其为分治法(Divideand ConquerMethod) ()