排序(1)冒泡排序
摘要:
在C语言的学习过程中, 排序可以对循环及选择进行一个很好的训练,在实际编程中也有着很重要的作用,本文针对于众多排序算法中的冒泡排序(之后还有快速排序、插入排序及选择排序)进行了原理上的简单说明,并进行了代码的实现。
文章内容:
- 冒泡排序的定义
- 冒泡排序的原理
- 实例分析
- 代码实现
冒泡排序(bubble sort)
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。这个过程类似于气泡从水底向上慢慢变大,越大的元素会经由交换慢慢“浮”到数列的顶端,所以叫做冒泡排序。
其原理类似下图
下面是一个例子(从小到大排序)。
原始待排序数组
6 | 2 | 4 | 1 | 5 | 9 |
---|
第一趟排序(外循环)
第一次两两比较, 6 > 2交换(内循环)
交换前状态
6 | 2 | 4 | 1 | 5 | 9 |
---|
交换后状态
2 | 6 | 4 | 1 | 5 | 9 |
---|
第二次两两比较,6 > 4交换
交换前状态
2 | 6 | 4 | 1 | 5 | 9 |
---|
交换后状态
2 | 4 | 6 | 1 | 5 | 9 |
---|
第三次两两比较,6 > 1交换
交换前状态
2 | 4 | 6 | 1 | 5 | 9 |
---|
交换后状态
2 | 4 | 1 | 6 | 5 | 9 |
---|
第四次两两比较,6 > 5交换
交换前状态
2 | 4 | 1 | 6 | 5 | 9 |
---|
交换后状态
2 | 4 | 1 | 5 | 6 | 9 |
---|
第五次两两比较,6 < 9不交换
第二趟排序(外循环)
第一次两两比较2 < 4不交换
第二次两两比较,4 > 1交换
交换前状态
2 | 4 | 1 | 5 | 6 | 9 |
---|
交换后状态
2 | 1 | 4 | 5 | 6 | 9 |
---|
第三次两两比较,4 < 5不交换
第四次两两比较,5 < 6不交换
第三趟排序(外循环)
第一次两两比较2 > 1交换
交换后状态
2 | 1 | 4 | 5 | 6 | 9 |
---|
交换后状态
1 | 2 | 4 | 5 | 6 | 9 |
---|
第二次两两比较,2 < 4不交换
第三次两两比较,4 < 5不交换
第四趟排序(外循环)无交换
第五趟排序(外循环)无交换
所以最后的结果为:1 2 4 5 6 9
下列为代码(仅供参考):
void main() {
int a[6] = {6, 2, 4, 1, 5, 9};
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5 - i; j++){
if(a[j] < a[j + 1]){
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp
}
}
}
}