深圳幻海软件技术有限公司 欢迎您!

C语言——冒泡排序

2023-06-29

冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大

冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。

以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。

 

代码如下 

  1. #include<stdio.h>
  2. void Bubble_sort(int arr[], int size)
  3. {
  4. int j,i,tem;
  5. for (i = 0; i < size-1;i ++)//size-1是因为不用与自己比较,所以比的数就少一个
  6. {
  7. int count = 0;
  8. for (j = 0; j < size-1 - i; j++)//size-1-i是因为每一趟就会少一个数比较
  9. {
  10. if (arr[j] > arr[j+1])//这是升序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
  11. {
  12. tem = arr[j];
  13. arr[j] = arr[j+1];
  14. arr[j+1] = tem;
  15. count = 1;
  16. }
  17. }
  18. if (count == 0)//如果某一趟没有交换位置,则说明已经排好序,直接退出循环
  19. break;
  20. }
  21. }
  22. int main()
  23. {
  24. int arr[10];
  25. int i;
  26. printf("请输入10个数\n");
  27. for (i = 0; i < 10; i++)//接收用户的数值
  28. {
  29. scanf("%d", &arr[i]);
  30. }
  31. printf("排序前的数组>");
  32. for (i = 0; i < 10; i++)
  33. {
  34. printf("%d ", arr[i]);
  35. }
  36. printf("\n排序后的数组>");
  37. Bubble_sort(arr, 10);
  38. for (i = 0; i < 10; i++)
  39. {
  40. printf("%d ", arr[i]);
  41. }
  42. return 0;
  43. }

  值得注意的是函数中的定义的count是为了检验是否进行了元素的交换,是对代码的一种优化

运行结果>

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览48554 人正在系统学习中