一、冒泡算法实现分析
1、假设有5个元素分别为8,6,15,9,3对其进行冒泡排序,我们需要关注的有三点如下:
(1)元素个数 n;
(2)需要比较的趟数 i;
(3)每趟比较的次数 j;
2、它们之间的关系为:
(1)由于每比较一趟后,所需的比较的元素个数就减少1,所以总共比较的趟数为n-1趟
(2)由于元素是相邻之间进行两两比较的,所以每趟比较的次数为本趟元素个数减去1;
3、详细过程如下表
二、代码实现
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 int main(char argc, char *argv[]) 6 { 7 int n = atoi(argv[1]), a[n], i, j, tmp; 8 9 if (argc != 2) 10 { 11 printf("Usage: %s\n", argv[0]); 12 return -1; 13 } 14 15 printf("请输入n = %d个元素\n",n); 16 for (i=0; i<n; i++) 17 { 18 scanf("%d", &a[i]); 19 } 20 21 for (i=0; i<n; i++) //i表示比较趟数,0到n-2有效(总共n-1趟) 22 { 23 for (j=0; j<n-1-i; j++) //j表示每趟比较次数 24 { 25 26 if (a[j] > a[j+1]) //交换相邻两个元素的值, 若减序则a[j] < a[j+1] 27 { 28 tmp = a[j]; 29 a[j] = a[j+1]; 30 a[j+1] = tmp; 31 } 32 } 33 } 34 35 for(i=0; i<n; i++) 36 { 37 printf("a[%d] = %d\n",i,a[i]); 38 39 } 40 return 0; 41 }