交换类排序:根据序列中两个元素关键字的比较结果来交换他俩在序列中的位置。

冒泡排序:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i])则交换他们,直到序列比较完。我们称它为一趟冒泡,结果将最小的元素交换到待排序序列的第一个位置。下一趟冒泡时,前一趟确定的最小元素不再参与比较,待排序列减少一个元素,每趟冒泡的结果把序列中最小元素放到了序列的最终位置,……,这样最多n-1趟冒泡就能把所有元素排好序。

void BubbleSort(ElemType A[],int n){
for(i=;i<n-;i++){
bool flag=false; //设置标志位
for(j=n-;j>i;j--) //一趟冒泡过程
if(A[j-].key>A[j].key){ //将较小的元素向上移动
ElemType temp=A[j-].key;
A[j-].key=A[j].key;
A[j].key=temp;
flag=true; //发生了数据交换,修改标志位
}
if(flag==false) return; //如果有一趟没有发生数据交换,表示序列已经完成了排序
}
}

空间复杂度:O(1)。

时间复杂度:在最糟糕的情况下,初始序列是逆序的,时间复杂度为O(n2);在最好的情况下,初始序列是顺序的,时间复杂度为O(n)。

稳定性:当两个关键字相同,if的判断条件不成立,不会发生数据的移动,因此是稳定的。

快速排序:一种基于分治法的排序方法。每一趟快排选择序列中任一个元素作为枢轴(pivot)(通常选择第一个元素),将序列中比枢轴小的元素都移到枢轴前边,比枢轴大的元素都移到枢轴后边。其实现为:

int Partition(ElemType A[],int low,int high){      //一次快速排序,low是待排序起始下标,high是待排序末位下表
ElemType pivot=A[low]; //第一个元素作为枢轴
while(low<high){
while(low<high&&A[high]>=pivot) --high; //先从末尾往前找到第一个比枢轴小的元素
A[low]=A[high]; //用high的元素替换low的元素
while(low<high&&A[low]<=pivot) ++low; //再从开头往后找到第一个比枢轴大的元素
A[high]=A[low]; //用low的元素替换high的元素
}
A[low]=pivot; //枢轴元素放在最终的位置
return low; //返回放枢轴的最终位置
}
void QuickSort(ElemType A[],int low,int high){
if(low<high){
int pivopos=Partition(A,low,high);
QuickSort(A,low,pivopos-); //分治递归左半部分
QuickSort(A,pivopos+,high); //分治递归右半部分
}
}

时间复杂度:最好情况下O(nlogn),待排序数列越无序,算法效率越高;最坏情况下时间复杂度为O(n2),待排序序列越有序,算法效率越低。

稳定性:不稳定,存在交换关键字。

C语言排序算法学习笔记——交换类排序的更多相关文章

  1. C语言排序算法学习笔记——插入类排序

    排序就是讲原本无序的序列重新排序成有序的序列.序列里可以是一个单独数据,也可以是多个数据组合的记录,按照记录里的主关键字或者次关键字进行排序. 排序的稳定性:如果排序表中有两个元素R1,R2,其对应的 ...

  2. C语言排序算法学习笔记——选择类排序

    选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了. 简 ...

  3. C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

    C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...

  4. C / C++算法学习笔记(8)-SHELL排序

    原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...

  5. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  6. R语言与机器学习学习笔记

    人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...

  7. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  8. go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE

    go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE Go语言是谷歌2009发布的专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速 ...

  9. 《Algorithms算法》笔记:元素排序(3)——洗牌算法

    <Algorithms算法>笔记:元素排序(3)——洗牌算法 Algorithms算法笔记元素排序3洗牌算法 洗牌算法 排序洗牌 Knuth洗牌 Knuth洗牌代码 洗牌算法 洗牌的思想很 ...

随机推荐

  1. 常用css

    边框 css   基本设置:border:1px solid #d2d2d2;    风格有:solid=>实线 double=>双实线 dotted=>点状 dashed=> ...

  2. 数组之slice,splice,Concact,Reverse,Sort方法

    Slice(strart,end)用来从数组中提取元素.该方法不会改变元素数组,而是将截取到的元素封装到一个新数组中返回 参数start 截取开始的位置索引,包含开始索引 参数end 截取结束位置的索 ...

  3. parallel::ForkManager

    use Parallel::ForkManager; my $MAX_PROCESSES=10;   #申明最大进程数(一次创建的进程越多,越耗内存): my $pm = new Parallel:: ...

  4. Cannot create PoolableConnectionFactory (Communications link failure The last packet sent successfu

    SQL: Cannot create JDBC driver of class '' for connect URL 使用数据库数据源的web 项目,发布后,访问数据库500报错: 浏览器端: 控制台 ...

  5. css常用的可继承属性和不可继承属性

    不可继承属性1.display2.text-decoration 添加文本样式3.list-style4.盒子模型属性(如padding系列,border系列,margin等,width,height ...

  6. ANOVA-方差分析和单尾方差分析

    https://www.cnblogs.com/webRobot/p/6877283.html https://blog.csdn.net/zijinmu69/article/details/8056 ...

  7. Sails -初级学习配置

    新建一个命名为sails的文件夹1.安装 npm -g install sails || cnpm -g install sails 注意:安装必须是全局安装 cnpm install sails - ...

  8. [spoj Favorite Dice ][期望dp]

    (1)https://vjudge.net/problem/SPOJ-FAVDICE 题意:有一个n面的骰子,每一面朝上的概率相同,求所有面都朝上过至少一次的总次数期望. 题解:令dp[i]表示 i ...

  9. python画高斯分布图形

    高斯分布,也叫正态分布,是一个在数学.物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力. 若随机变量X服从一个数学期望为μ.方差为σ^2的正态分布,记为N(μ,σ^2).其概率 ...

  10. IDT表连接

    一.table A为基础表,左外连接table B,若要限制B的条件,需加(+),否则会对结果集以B表的条件进行过滤. DWD_REASON_CODE.CODE(+)=DWR_EDA_CL_TST_D ...