排序算法--冒泡排序

##本小节知识点:
1. 【了解】冒泡排序
2. 【掌握】冒泡排序的步骤
3. 【了解】练习

---

##1.冒泡排序
- 冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复 地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来 是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

- 冒泡排序 分为: 大数下沉 小数上浮
---

##2.冒泡排序
- 1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应 该会是最大的数。
- 3)针对所有的元素重复以上的步骤,除了最后一个。
- 4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

- 示例:




---

##3.练习
- 输入一组无序数据,使用冒泡排序法进行排序,并输出。
```

 1 //  冒泡排序
 2 
 3 #include <stdio.h>
 4 //交换算法
 5 //打印输出数组的功能
 6 void printArray(int array[],int length)
 7 {
 8     for (int i=0; i<length; i++) {
 9         printf("%d ",array[i]);
10     }
11     printf("\n");
12 }
13 
14 //为了能够交换功能模块化,需要使用传地址来改变函数外的值
15 //要注意的是,参数需要传入地址值,也就是通过&获取变量的地址
16 void swop(int *a,int *b)
17 {
18     int temp = *a;
19     *a = *b;
20     *b = temp;
21 }
22 //沉底算法
23 void bubbleSort(int a[],int n)
24 {
25     for (int i=0; i<n-1; i++) {
26         for (int j = 0; j<n-i; j++) {
27             printf("替换前:");
28             printArray(a, 5);
29             if (a[j]>a[j+1]) {
30                 printf("开始替换\n");
31                 //两两比较,大的往后移
32                 swop(&a[j], &a[j+1]);
33                 printf("替换后:");
34                 printArray(a, 5);
35                 printf("完成一次替换。\n");
36             }
37         }
38         printf("完成一次遍历替换================\n");
39     }
40 }
41 //冒泡算法
42 void bubbleSort2(int a[],int n)
43 {
44     for (int i=0; i<n-1; i++) {
45         for (int j = n-1; j>i; j--) {
46             if (a[j]<a[j-1]) {
47                 swop(&a[j], &a[j-1]);
48             }
49         }
50         printf("完成一次遍历替换================\n");
51     }
52 }
53 
54 int main(int argc, const char * argv[]) {
55     
56     int a[5] = {23,45,12,13,18};
57     bubbleSort2(a,5);
58     printArray(a,5);
59     return 0;
60 }

 

备注:便于和数组首个下标索引是0,范围起始位置我表述为0。

算法思路:外循环,因为冒泡(小的数往前移动)或者沉底(大的数往后靠)的次数一定是n-1次,所以循环范围自然就是0~n-2<n-1.

     内循环,比如沉底(大的数往后靠),比较的范围(0~n)-->.....-->(0~1),也就是说到最后一次沉底,就是第0个数和第1个数比较,然后大的往后移。

           关于冒泡(小的数往前移),同理。

 



 
 
 
 
posted @ 2015-10-20 00:04  何杨  阅读(320)  评论(0编辑  收藏  举报