当前位置:   article > 正文

数据结构--冒泡排序_数据结构冒泡排序例题

数据结构冒泡排序例题

1、(1)冒泡排序:沉石排序,每一趟循环两两比较,大的向后挪动,最终最大值放在最后,假设有n个书数据,则需要跑n-1趟。

 代码:

  1. void BubbleSort(int* arr, int len)
  2. {
  3. for (int i = 0; i < len - 1l; i++)
  4. {
  5. for (int j = 0; j + 1 < len-i; j++)//比较的下一位j+1<每一趟的最后一位数(len-i)
  6. {
  7. if (arr[j] > arr[j + 1])
  8. {
  9. int tmp = arr[j];
  10. arr[j] = arr[j + 1];
  11. arr[j + 1] = tmp;
  12. }
  13. }
  14. }
  15. }
  16. void Show(int arr[], int len)
  17. {
  18. for (int i = 0; i < len; i++)
  19. {
  20. printf("%d ", arr[i]);
  21. }
  22. printf("\n");
  23. }
  24. int main()
  25. {
  26. int arr[] = { 12,2,39,88,4,6,25,232,62,221 };
  27. BubbleSort(arr, sizeof(arr) / sizeof(arr[0]));
  28. Show(arr, sizeof(arr) / sizeof(arr[0]));
  29. return 0;
  30. }

结果:

对冒泡排序的优化:

 上述冒泡排序,但在第四趟处理完成时,就已经完全有序,理应直接退出,第五趟完全可以优化。

       问题:怎么判断数据已经完全有序?

答:从前到后遍历一遍,没有交换操作,此时就可判定数据完全有序

(2)优化后代码:

  1. //对冒泡排序的优化
  2. void BubbleSort2(int* arr, int len)
  3. {
  4. int count = 0;//记录需要跑几趟
  5. int flag = 0;//首先令标志等于0
  6. //从头到尾遍历,看是否有交换操作,没有则完全有序
  7. for (int i = 0; i < len - 1l; i++)//需要多少趟
  8. {
  9. flag = 0;//每一趟都需要重置为0
  10. for (int j = 0; j + 1 < len-i; j++)//比较的下一位j+1<每一趟的最后一位数(len-i)
  11. {
  12. if (arr[j] > arr[j + 1])
  13. {
  14. int tmp = arr[j];
  15. arr[j] = arr[j + 1];
  16. arr[j + 1] = tmp;
  17. flag = 1;//存在交换,标志修改
  18. }
  19. }
  20. count++;
  21. if (flag == 0)//标志不变,说明已完全有序,跳出循环
  22. {
  23. break;
  24. }
  25. }
  26. }

(3)冒泡排序的时间复杂度:O(n^2),

         空间复杂度:O(1) ,

         稳定性:稳定

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/831722
推荐阅读
相关标签
  

闽ICP备14008679号