算法之交换排序
Posted 铜须的编程生活
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法之交换排序相关的知识,希望对你有一定的参考价值。
一、概念
思想:
如果元素比较是逆序则交换元素。
1.冒泡排序
基本思想:基于简单交换思想
每趟不断将元素两两比较,按照需要是顺序判断是否需要进行交换。
void bubble_sort(SqList &L) // 冒泡排序算法
int m,i,j; RedType x; // 交换时临时存储
for( m=1; m<=n-1;m++) // 总共需要m趟
for(j=1;j<=n-m; m++)
if(L.r[j].key>L.r[j+1].key) // 发现逆序
x=L.r[j];L.r[j]=L.r[j+1]; L.r[j+1]=x // 交换
优点:每趟结束时,不仅能找到一个最大值到最后面的位置,还能理顺其他元素。
提高思路:如果某一趟比较没有进行交换顺序,则表明元素顺序已经达成。
void bubble_sort(SqList &L) // 冒泡排序算法
int m,i,j,flag=1; RedType x; // 交换时临时存储,新增一个标记判断是否有进行交换
for( m=1; m<=n-1 && flag=1;m++) // 总共需要m趟
flag = 0
for(j=1;j<=n-m; m++)
if(L.r[j].key>L.r[j+1].key) // 发现逆序
flag = 1 // 如果发生交换,标记符置为1,如果没有进行表换,flag保存为0
x=L.r[j];L.r[j]=L.r[j+1]; L.r[j+1]=x // 交换
2.快速排序
思路:
任取一个元素,所有比他大的一律方后面,比他小的一律方前面。形成左右两个子表
对各子表重新选择中心元素并依次规则调整
直到每一个子表的元素只剩一个
以上是关于算法之交换排序的主要内容,如果未能解决你的问题,请参考以下文章