冒泡排序(高级版)之C++实现

本文介绍了一种使用C++实现的冒泡排序高级版本,该版本通过减少不必要的比较来提高排序效率,并详细展示了其源代码及运行效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序(高级版)之C++实现

一、源代码:BubbleSortHigh.cpp

 1 #include<iostream>
 2 using namespace std;
 3 
 4 /*定义输出一维数组的函数*/
 5 void print(int array[], int n)
 6 {
 7     for (int i = 0; i < n; i++)
 8     {
 9         cout << array[i] << " ";
10     }
11     cout << endl;
12 }
13 
14 /*定义冒泡排序的函数,升序排序,返回交换次数*/
15 int bubbleSort(int array[], int n)
16 {
17     //定义变量,记录交换次数
18     int count = 0;
19     //定义中间变量temp
20     int temp;
21     //遍历数组(进行排序)
22     cout << "开始对数组进行排序了..." << endl;
23     for (int i = 0; i < n; i++)
24     {
25         //定义变量是否进行交换了,默认为未交换,置为0
26         bool swap = false;
27         for (int j = 0; j < n - 1 - i; j++)
28         {
29             cout << "" << (i + 1) << "趟第" << (j + 1) << "次排序" << endl;
30             //如果左边的数大于右边的数就进行交换顺序
31             if (array[j] > array[j + 1])
32             {
33                 temp = array[j];
34                 array[j] = array[j + 1];
35                 array[j + 1] = temp;
36                 cout << array[j] << "" << array[j + 1] << "互换了" << endl;
37                 //输出此时数组的顺序
38                 cout << "数组此时的顺序是:";
39                 print(array, 10);
40                 //每交换一次,记录数加1
41                 count++;
42                 //如果交换了,将swap置为1
43                 swap = true;
44             }
45         }
46         //如果未交换,即swap=0,则进行下一趟
47         if (!swap)
48         {
49             break;
50         }
51     }
52     cout << "数组排序结束了..." << endl;
53     return count;
54 }
55 
56 int main()
57 {
58     //定义待排序的一维数组
59     int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 };
60     //输出原始数组
61     cout << "原始数组是:" << endl;
62     print(array, 10);
63     //对数组进行排序
64     int count = bubbleSort(array, 10);
65     //输出排序后的数组
66     cout << "排序后的数组是:" << endl;
67     print(array, 10);
68     cout << "共交换" << count << "" << endl;
69 }

 

二、运行效果(与初级版运行效果比较,过程更简单)

 

 

转载于:https://www.cnblogs.com/zfc-java/p/7390685.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值