版本记录
版本号 | 时间 |
---|---|
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。
后记
未完,待着,这一篇写的比较少,关于冒泡也没什么多说的。