当前位置:   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. #include<iostream>
  7. using namespace std;
  8. void bubsort(int number[]){
  9. int i, j, k, flag = 1;
  10. for(i = 0; i < MAX-1 && flag == 1; i++){
  11. flag = 0;
  12. for(j = 0; j < MAX-i-1; j++){
  13. if(number[j+1] < number[j]){
  14. //此处可以将SWAP宏定义中的交换修改为元素在内部交换
  15. SWAP(number[j+1], number[j]);
  16. flag = 1;
  17. }
  18. }
  19. cout<<"第 "<<i+1<<" 次排序:";
  20. for(k = 0; k < MAX; k++){
  21. cout<<number[k]<<' ';
  22. }
  23. cout<<endl;
  24. }
  25. }
  26. int main(){
  27. int number[MAX] = {0};
  28. int i;
  29. srand(time(NULL)); //刷新每次产生的随机数,若无此句,每次随机数相同,亲自尝试一下便知
  30. cout<<"\n冒泡排序:\n\n";
  31. cout<<"排序前:";
  32. for(i = 0; i < MAX; i++){
  33. number[i] = rand() % 100; //产生0-99的随机数,这里没有采用固定的数组值进行排序,随机生成
  34. cout<<number[i]<<' ';
  35. }
  36. cout<<endl<<endl;
  37. bubsort(number);
  38. return 0;
  39. }

运行结果

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

闽ICP备14008679号