数据结构(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].