当前位置:   article > 正文

C语言-冒泡排序 (数据结构)_c语言数据结构冒泡排序

c语言数据结构冒泡排序

“冒泡排序法” 基本原理 

        从将要排序的对象中每次选择一个最小元素(或最大元素),按照非递减(从小到大)(或非递增(从大到小))顺序与相邻元素进行比较, 将小(或大)的元素交换至左端(或右端),所以小(或大)的元素会不断的往左(或右)移动,每次移动时,最大元素向“气泡”一样冒出,然后移动到适当的位置,因此称为冒泡排序法。以此类推,直至排序完成。

        冒泡排序法可以利用设置标志的方式减少比较时间,当走完一圈没有发生交换元素的动作,表示排序已经完成,而无需再进行之后的回圈比较与交换动作。

         如下所示:

        排序前:95 27 90 49 80 58 6 9 18 50

第1步:27 90 49 80 58 6 9 18 50 [95] 95浮出

第2步:27 49 80 58 6 9 18 50 [90 95] 90浮出

第3步:27 49 58 6 9 18 50 [80 90 95] 80浮出

第4步:27 49 6 9 18 50 [58 80 90 95] 58浮出

第5步:27 6 9 18 49 [50 58 80 90 95] 50浮出

第6步:6 9 18 27 [49 50 58 80 90 95] 49浮出

第7步:6 9 18 [27 49 50 58 80 90 95]  排序结束

到 第7步 时,剩下的数字6、9、18、27已经没有交换元素的动作,因此排序结束。

代码实现

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define MAX 10
  5. #define SWAP(x,y) {int t; t = x; x = y; y = t;}//借助宏定义实现元素交换,可以修改为函数
  6. void bubsort(int number[]){
  7. int i, j, k, flag = 1;
  8. for(i = 0; i < MAX-1 && flag == 1; i++){
  9. flag = 0; //判断结束标志
  10. for(j = 0; j < MAX-i-1; j++){
  11. if(number[j+1] < number[j]){
  12. //此处可以将SWAP宏定义中的交换修改为元素在内部交换
  13. SWAP(number[j+1], number[j]);
  14. flag = 1;
  15. }
  16. }
  17. printf("第 %d 次排序:", i+1);
  18. for(k = 0; k < MAX; k++){
  19. printf("%d ", number[k]);
  20. }
  21. printf("\n");
  22. }
  23. }
  24. int main(){
  25. int number[MAX] = {0};
  26. int i;
  27. srand(time(NULL));//刷新每次产生的随机数,若无此句,每次随机数相同,亲自尝试一下便知
  28. printf("\n冒泡排序:\n\n");
  29. printf("排序前:");
  30. for(i = 0; i < MAX; i++){
  31. number[i] = rand() % 100; //产生0-99的随机数,这里没有采用固定的数组值进行排序,随机生成
  32. printf("%d ", number[i]);//输出数组元素
  33. }
  34. printf("\n\n");
  35. bubsort(number);
  36. return 0;
  37. }

运行结果

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

闽ICP备14008679号