自从大一第一次接触冒泡算法后,就一直没对这个问题搞懂。虽然考试考了很多次,但一直没有时间去一点点弄懂,每次考试,就背背代码。
趁着这次复习,终于可以一步一步的理解冒泡算法了。
1 #include "stdio.h" 2 3 void print(int r[], int n) 4 { 5 int i; 6 for(i = 0; i < n; i++) 7 printf("%d ", r[i]); 8 puts(" "); 9 } 10 11 void BuffleSort_up(int r[], int n) 12 { 13 int i, j, temp; 14 for(i = 0; i < n; i++) 15 { 16 for(j = i+1; j < n; j++) 17 { 18 if(r[i] > r[j]) 19 { 20 temp = r[i]; 21 r[i] = r[j]; 22 r[j] = temp; 23 } 24 } 25 } 26 } 27 28 void BuffleSort(int r[], int n) 29 { 30 int i, j, temp; 31 for(i = 0; i < n; i++) 32 { 33 for(j = 0; j < n-i; j++) 34 { 35 if(r[j] > r[j+1]) 36 { 37 temp = r[j]; 38 r[j] = r[j+1]; 39 r[j+1] = temp; 40 } 41 } 42 } 43 } 44 45 int main() 46 { 47 int a[10] = {3, 1, 5, 2, 7, 8, 9, 4, 6, 0}; 48 printf("before sort: "); 49 print(a, 10); 50 BuffleSort(a, 10); 51 printf("sort after: "); 52 print(a, 10); 53 return 0; 54 }
冒泡算法的第一层遍历是 n次遍历
第二层遍历是从i 到 n-1 的遍历
这样的导致的遍历结果就是每次遍历就会把 最大的数 交换至最后一位。
不错在此之前,我自己按照自己的理解写了个冒泡算法。
第一层是从 0 到 n-1 的遍历
第二层是 从 i+1 到 n-1 的遍历
这样的遍历 结果是,每一此遍历把最小的数交换至最前面。