c++之冒泡排序法

思路:对于一个数组,我们想对它进行排序,其实只要将相邻的两个数进行比较,把小的放前面就好了。

比如:如果有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个数的顺序。

小结一下:

四个数我们用了3步完成排序,第一步进行了3次比较,第二步进行了2次比较,第三步进行了1次比较。

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

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

#include <iostream>
#include <string>
using namespace std;

int main() {
	int n[10];
	int i, j;
	int temp;                                 //用于缓存需要交换的数字
	cout << "请输入十个数字!" << endl;
	for (i = 0; i < 10; i++) {
		cin >> n[i];
	}
	for (i = 0; i < 9;i++) {                  //共进行9步
		for (j = 0; j < 9 - i;j++) {      //在每一步进行10-i次两两比较
			if (n[j] > n[j + 1]) {
				temp = n[j];
				n[j] = n[j + 1];
				n[j + 1] = temp;
			}
		}
	}
	cout << "排序后的数据是:" << endl;
	for (i = 0; i < 10; i++)
	{
	    cout << n[i] << ' ';
	}
	cout << endl;
    system("pause");
	return 0;
}

需要注意的点是:在内层循环中应该进行10-i 次比较,但是我们实际上我们的i 是从0开始的,但是我们之前的分析中i 的实际意义是步数,也就是从1开始的,所以我们在循环中是10-i-1=9-i 次。



  • 42
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值