算法-蛮力法-冒泡排序

1.冒泡排序原理

 冒泡排序在扫描过程中两两比较相邻记录,如果反序则交换,最终,最大记录就被“沉到”了序列的最后一个位置,第二遍扫描将第二大记录“沉到”了倒数第二个位置,重复上述操作,直到n-1 遍扫描后,整个序列就排好序了。

 

2.伪代码

算法3.7——起泡排序
  void BubbleSort(int r[ ], int n)       //数组下标从1开始
  {
      for (i=1; i<=n-1; i++)
         for (j=1; j<=n-i; j++)
           if (r[j]>r[j+1]) r[j]←→r[j+1];//如果反序,则交换元素
    }

3.举例

  • 从后往前依次比较相邻的元素。若是要按照升序排序,则后面的元素比前面的小,就交换这2个元素;降序则相反。
  • 对每一对相邻元素作同样的工作,从第一对到最后一对。进行一轮比较交换下来,最后的元素就会是最小(或最大)的数了,这个数就不用参与后面的比较操作了。
  • 针对所有的元素重复以上的步骤。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

例子如下

 

4.完整代码

#include<iostream>
#include<cmath>
using namespace std;
#define N 500
void BubbleSort(int r[],int n){
    for (int i=0; i<n; i++)
    	for (int j=0; j<n-i-1; j++))//终止条件是j<n-i-1,因为j+1的范围不能超出堆栈,否则结果就会出现本来没有的数字0 
    		 if (r[j]>r[j+1])swap(r[j],r[j+1]);

}

int main(){
	cout<<"请输入数组中的元素个数n:"<<endl; 
	int n;
	cin>>n;	
	int r[N];
	cout<<"请输入需要选择排序的数组元素:"<<endl;
	for(int i=0;i<n;i++)
		cin>>r[i];

	BubbleSort(r,n);
	for(int i=0;i<n;i++){
		cout<<r[i]<<"  ";
	}
	
	
	return 0;
}

5.运行结果

 

6.参考文章

冒泡排序(C++)完整代码_叔均的博客-CSDN博客

经典算法之【冒泡排序】C++实现_不想变程序猿i的博客-CSDN博客

https://bbs.csdn.net/topics/380146123

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值