Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88188
  • 博文数量: 60
  • 博客积分: 4002
  • 博客等级: 中校
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 18:11
文章分类

全部博文(60)

文章存档

2011年(60)

我的朋友

分类: LINUX

2011-01-02 18:13:09

    冒泡排序:
    两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
具体实现请参考代码。

  1. #include <stdio.h>

  2. void bubbleSort(int *a, int n);
  3. void bubbleSort2(int *a, int n);

  4. int
  5. main(int argc, char **argv)
  6. {
  7.     int a[10] = {1, 3, 5, 7, 9, 0, 2, 4, 6, 8};
  8.     int n = sizeof(a) / sizeof(a[0]);

  9. //    bubbleSort(a, n);
  10.     bubbleSort2(a, n);

  11.     int i;
  12.     printf("Result: ");
  13.     for (i = 0; i < 10; i++) {
  14.         printf("%d,", a[i]);
  15.     }
  16.     printf("\n");

  17.     return 0;
  18. }

  19. void
  20. bubbleSort(int *a, int n)
  21. {
  22.     int i, j, tmp;

  23.     for (i = 0; i < n-1; i++) {
  24.         for (j = n-1; j > i; j--) {
  25.             if (a[j-1] > a[j]) {
  26.                 tmp = a[j-1];
  27.                 a[j-1] = a[j];
  28.                 a[j] = tmp;
  29.             }
  30.         }
  31.     }
  32. }

  33. void
  34. bubbleSort2(int *a, int n)
  35. {
  36.     int i, j, tmp;
  37.     int flag;

  38.     for (i = 0; i < n-1; i++) {
  39.         flag = 0;
  40.         for (j = n-1; j > i; j--) {
  41.             if (a[j-1] > a[j]) {
  42.                 tmp = a[j-1];
  43.                 a[j-1] = a[j];
  44.                 a[j] = tmp;
  45.                 flag = 1;
  46.             }
  47.         }
  48.         if (!flag) {
  49.             return ;
  50.         }
  51.     }
  52.     
  53. }
注:平均时间复杂度为:O(n2),就地、稳定。注意n的求法。
阅读(394) | 评论(0) | 转发(0) |
0

上一篇:归并排序

下一篇:快速排序

给主人留下些什么吧!~~