算法简单学习(四)—— 冒泡排序

版本记录

版本号 时间
V1.0 2017.08.15

前言

将数据结构和算法比作计算机的基石毫不为过,追求程序的高效是每一个软件工程师的梦想。下面就是我对算法方面的基础知识理论与实践的总结。感兴趣的可以看上面几篇。
1. 算法简单学习(一)—— 前言
2. 算法简单学习(二)—— 一个简单的插入排序
3. 算法简单学习(三)—— 分治法与合并排序

冒泡排序

冒泡排序重复的交换相邻的两个反序元素。

1. 伪代码

下面看一下伪代码。

冒泡排序伪代码

2. 代码实现

其实冒泡排序还是很好理解的,特别是很多面试的时候经常问冒泡排序的实现等等,下面我们就给出代码,具体如下所示:

#include <stdio.h>
#include <string.h>
#include <time.h>

int main(int argc, const char * argv[])
{
    //冒泡排序
    
    int A[8] = {10, 4, 5, 7, 1, 2, 3, 6};
    int length = sizeof(A)/sizeof(A[0]);
    
    for (int i = 0; i < length - 1; i ++) {
        for (int j = length; j > i; j --) {
            if (A[j] < A[j - 1]) {
                A[j] = A[j] ^ A[j - 1];
                A[j - 1] = A[j] ^ A[j - 1];
                A[j] = A[j] ^ A[j - 1];
            }
        }
    }
    
    for (int k = 0; k < length; k++) {
        printf("%d\n",A[k]);
    }
}

下面看输出结果

1
2
3
4
5
6
7
10

Program ended with exit code: 0

这里最外层循环轮次为length - 1 轮,内层轮次比较为length - i轮。找到后者比前者小的元素,就用亦或交换两个值的位置,最后for循环遍历输出最终排好序列的数组A。

后记

未完,待着,这一篇写的比较少,关于冒泡也没什么多说的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容