冒泡排序

来源:互联网 发布:淘宝客是什么意思 编辑:程序博客网 时间:2024/06/05 17:10
下面给出了冒泡排序的一般实现和优化实现。一般实现是教科书里常见的实现方法,无论数组是否排序好了,都会进行N-1轮比较; 而优化实现,在数组已经排序好的情况下,会提前退出比较,减小了算法的时间复杂度。
纯文本复制
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define N 8
  4. void bubble_sort(int a[],int n);
  5. //一般实现
  6. void bubble_sort(int a[],int n)//n为数组a的元素个数
  7. {
  8. //一定进行N-1轮比较
  9. for(int i=0; i<n-1; i++)
  10. {
  11. //每一轮比较前n-1-i个,即已排序好的最后i个不用比较
  12. for(int j=0; j<n-1-i; j++)
  13. {
  14. if(a[j] > a[j+1])
  15. {
  16. int temp = a[j];
  17. a[j] = a[j+1];
  18. a[j+1]=temp;
  19. }
  20. }
  21. }
  22. }
  23. //优化实现
  24. void bubble_sort_better(int a[],int n)//n为数组a的元素个数
  25. {
  26. //最多进行N-1轮比较
  27. for(int i=0; i<n-1; i++)
  28. {
  29. bool isSorted = true;
  30. //每一轮比较前n-1-i个,即已排序好的最后i个不用比较
  31. for(int j=0; j<n-1-i; j++)
  32. {
  33. if(a[j] > a[j+1])
  34. {
  35. isSorted = false;
  36. int temp = a[j];
  37. a[j] = a[j+1];
  38. a[j+1]=temp;
  39. }
  40. }
  41. if(isSorted) break; //如果没有发生交换,说明数组已经排序好了
  42. }
  43. }
  44. int main()
  45. {
  46. int num[N] = {89, 38, 11, 78, 96, 44, 19, 25};
  47. bubble_sort(num, N); //或者使用bubble_sort_better(num, N);
  48. for(int i=0; i<N; i++)
  49. printf("%d ", num[i]);
  50. printf("\n");
  51. system("pause");
  52. return 0;
  53. }