首页 > 代码库 > 冒泡排序算法总结
冒泡排序算法总结
冒泡排序算法是思路最简单、最直接的排序方法之一。
每遍历一遍,则将最大(或者最小)的一个数冒泡出来。
预先定义的排序类型。由于只是为了验证排序方法是否正确,所以此处只是简单的对10个元素进行排序检测。如下所示:
#define MAXSIZE 10typedef struct { int r[MAXSIZE+1]; int length;}SqList;void swap(SqList *L,int i,int j){ int temp = L->r[i]; L->r[i] = L->r[j]; L->r[j] = temp;}
备注:本文中的所有排序都是按照升序进行排序的。
第一种:有点像选择排序的冒泡排序算法:
这种方法并不是传统意义上的冒泡法。传统上的冒泡法是对排序数组中的相邻的元素进行比较、交换,而这种方法是用每一个元素与剩下的元素进行比较、交换。代码如下所示:
void BubbleSort0(SqList *L){ int i,j; for (i = 0; i < L->length-1; i++) { for (j = i+1; j < L->length;j++) { if (L->r[i] > L->r[j]) { swap(L,i,j); } } }}
第二种:传统的冒泡排序法:
void BubbleSort1(SqList *L){ int i,j; for (i = 0; i < L->length; i++) { for (j = 0; j < L->length - i -1; j++) { if (L->r[j] > L->r[j+1]) { swap(L,j,j+1); } } }}
第三种:改进后的冒泡排序法
我们知道,在冒泡排序算法中,即使后面的元素序列已经有序了,不需要再进行比较时,冒泡排序算法依旧会执行到底。那么能不能将其进行改进,当遇到这样的情况时,避免多余的比较操作呢?
可以设置一个标识位,当没有遇到交换数据时,就说明已经排好序了。那么算法即可停止运行。具体代码如下所示:
void BubbleSort2(SqList *L){ int i,j; bool flag = true; for ( i = 0; i < L->length && flag; i++) { flag = false; for (j = 0; j < L->length-1-i; j++) { if (L->r[j] > L->r[j+1]) { swap(L,j,j+1); flag = true; } } }}
参考资料:《大话数据结构》
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。