i编程——励志成为最大的编程论坛!

 找回密码
 立即注册
查看: 505|回复: 0

C++冒泡排序的使用,何为冒泡排序?

[复制链接]

8

主题

3

回帖

55

积分

注册会员

积分
55
发表于 2023-5-12 22:44:31 | 显示全部楼层 |阅读模式
冒泡排序顾名思义,就是将一串数字比大小,分类好。
例:1,5,4,3,7,9

冒泡排序后(从小到大顺序):1,3,4,5,7,9
思路:对于一个数组,我们想对它进行排序,其实只要将相邻的两个数进行比较,把小的放前面就好了。


比如:如果有4个数(1, 8,5,2)。

    1.第一次比较前两个数(1,8)的大小,把位置发现不需要交换,第二次比较在后面两个数(8,5)的大小,交换后是(5,8),再之后对(8,2)交换得到(2,8),所以进行了三次比较得到(1,5, 2,8);最大的数8已经到最后了,后面的2也上浮了一个位置,就像水中的气泡一样,所以叫冒泡排序法。

    这时候发现还没完全排好。但是我们已经发现最大的数8已经在最后,所以我们只要对前面的三个数进行排序就好。

    2.所以第一次比较1,5,发现不用交换,第二次比较5,2,交换后是2,5。最后成为(1,2,5,8)。所以我们用了两次把这三个数排好了。

    3.本例很是巧合,前两个数1和2我们很清楚知道不用比较。事实上在不知道的情况下我们需要对他们进行比较一次,才能最终确定这4个数的顺序。


   
     假设n个数,那么就要进行n-1 步,第i 步中则需要n-i 次比较。

     所以我们的程序就出来了(以10个数的排序为例):

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;

  4. int main() {
  5.         int n[10];
  6.         int i, j;
  7.         int temp;                                 //用于缓存需要交换的数字
  8.         cout << "请输入十个数字!" << endl;
  9.         for (i = 0; i < 10; i++) {
  10.                 cin >> n[i];
  11.         }
  12.         for (i = 0; i < 9;i++) {                  //共进行9步
  13.                 for (j = 0; j < 9 - i;j++) {      //在每一步进行10-i次两两比较
  14.                         if (n[j] > n[j + 1]) {
  15.                                 temp = n[j];
  16.                                 n[j] = n[j + 1];
  17.                                 n[j + 1] = temp;
  18.                         }
  19.                 }
  20.         }
  21.         cout << "排序后的数据是:" << endl;
  22.         for (i = 0; i < 10; i++)
  23.         {
  24.             cout << n[i] << ' ';
  25.         }
  26.         cout << endl;
  27.     system("pause");
  28.         return 0;
  29. }
复制代码



懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|i编程 ( 陕ICP备2025058491号-1 )

GMT+8, 2025-6-20 02:18 , Processed in 0.137466 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表