数据结构(11) - 冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

 1 /**
 2  * C data structure bubble sort example.
 3  * 
 4  * License - MIT.
 5 */
 6 
 7 #include <stdio.h>
 8 
 9 
10 #define DISPLAY_ARRAY(i, buf, len) \
11         do { \
12             for (i = 0; i < len; i++) \
13                 printf("%d ", buf[i]); \
14             printf("\n"); \
15         } while(0)
16 
17 
18 /**
19  * bubble_sort - Bubble sort.
20 */
21 int bubble_sort(int *buf, int len)
22 {
23     int i   = -1,
24         j   = -1,
25         tmp = -1;
26 
27     for (i = 0; i < len - 1; i++) {
28         for (j = 0; j < len - 1 - i; j++) {
29             if (buf[j] > buf[j + 1]) {
30                 tmp         = buf[j];
31                 buf[j]      = buf[j + 1];
32                 buf[j + 1]  = tmp;
33             }
34         }
35     }
36 
37     return 0;
38 }
39 
40 
41 /**
42  * Main function.
43 */
44 int main(void)
45 {
46     int i = 0;
47     int buf[] = {27, 13, 18, 29, 74, 73, 50, 65, 97, 36};
48     int len = sizeof(buf) / sizeof(int);
49 
50     printf("The original array:\n");
51     DISPLAY_ARRAY(i, buf, len);
52 
53     bubble_sort(buf, len);
54 
55     printf("The sort array:\n");
56     DISPLAY_ARRAY(i, buf, len);
57 
58     return 0;
59 }

 

详细请参考Github: [Link] [https://github.com/Phoebus-Ma/C-Helper/tree/main/Class-1/Sort.C].

posted @ 2022-06-25 17:35  this毛豆  阅读(20)  评论(0编辑  收藏  举报