题目描述

请创建一个一维整型数组用来存储待排序关键码,关键码从数组下标为1的位置开始存储,下标为0的位置不存储关键码。输入关键码的个数,以及各个关键码,采用起泡排序方法对关键码数组进行排序(从小到大)。输出排好序之前的每一趟排序后的关键码序列。

输入描述

各个命令以及相关数据的输入格式如下:
第一行输入关键码的个数n
第二行输入n个整型关键码

输出描述

输出关键码比较过程,即输出每一趟排序后的关键码序列,每轮一行,关键码之间以空格隔开,最后一个关键码后有空格,然后回车

输入样例

输入样例1:
5
1 2 4 3 5
输入样例2:
5
5 4 3 2 1

输出样例

输出样例1:
1 2 3 4 5
输出样例2:
4 3 2 1 5
3 2 1 4 5
2 1 3 4 5
1 2 3 4 5

 方法一:(独创的馊主意)

#include<iostream>
using namespace std;
int main()
{ int a[100],n,temp; //输入排序数的个数; cin>>n;for(int i=0;i<n;i++) cin>>a[i];//起泡排序 for(int i=0;i<n;i++) { if(n%2==0)//n的奇偶判断for(int j=0;j<n-i;j++){ if(a[j]>a[j+1]){  temp=a[j];a[j]=a[j+1]; a[j+1]=temp; } }elsefor(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){    temp=a[j];a[j]=a[j+1]; a[j+1]=temp; } }//用于控制验证是否排序将完成(完成前的每一趟交换后的数据输出); int flag=1;for(int c=0;c<n-1;c++){if(a[c]>=a[c+1]){flag=0;}}if(flag==0){for(int k=0;k<n;k++){cout<<a[k]<<" ";}} }//对排序完成后的数据输出 for(int k=0;k<n;k++)cout<<a[k]<<" ";return 0;
}

方法二:

#include<iostream>
using namespace std;
int main()
{   int n,b1=0;while(cin>>n){int j;b1++;int data[n+1];for(int i=0;i<n;i++){cin>>data[i];}int temp,ex,b;ex=n-1; cout<<"输出样例"<<b1<<":"<<endl;while(ex!=0){b=ex;ex=0;for(j=0;j<b;j++) {if(data[j]>data[j+1]){temp=data[j];data[j]=data[j+1];data[j+1]=temp;ex=j;}}int flag=1;for(int c=0;c<n-1;c++){if(data[c]>=data[c+1]){flag=0;}}if(flag==0){for(int k=0;k<n;k++){cout<<data[k]<<" ";}cout<<endl;} }for(int k=0;k<n;k++){cout<<data[k]<<" ";}}
}

方法三:(和方法二一样,只不过构造了函数)

#include <iostream>
using namespace std;
class Sort
{
public:void BubbleSort(int data[]);int length;
};void Sort::BubbleSort(int data[])
{int j;int exchange;int bound;int temp;exchange = length-1;  //第一趟起泡排序的区间是  [0-length-1]while(exchange != 0){bound = exchange; exchange = 0;for ( j = 1; j < bound;j++){if(data[j] > data[j+1]){temp = data[j];data[j] = data[j+1];data[j+1] = temp;exchange = j;}}int flag=1;for (j = 1; j < length-1;j++){if (data[j] > data[j+1]) flag=0;}if(flag==0){for (int k = 1;k < length;k++){cout <<data[k]<<" ";}cout <<endl;}}for (int k = 1;k < length;k++){cout << data[k]<<" ";}
}int main ()
{int i;cin>> i;int a[i+1];Sort S;S.length = i+1;for (int j = 1;j < i+1;j++){cin>> a[j];}S.BubbleSort(a);return 0;
}

冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名冒泡排序

复杂度与稳定性

思路原理

以顺序为例

  1. 从第一个元素开始一个一个的比较相邻的元素,如果第一个比第二个大即a[1]>a[2],就彼此交换。

  2. 从第一对到最后一对,对每一对相邻元素做一样的操作。此时在最后的元素应该会是最大的数,我们也称呼一遍这样的操作一趟冒泡排序

  3. 针对所有的元素重复以上的步骤,每一趟得到的最大值已放在最后,下一次操作则不需要将此最大值纳入计算。

  4. 持续对每次对越来越少的元素,重复上面的步骤。

  5. 直到所有的数字都比较完成符合a[i]<a[i+1],即完成冒泡排序。

图示过程

以数组数据{ 70,50,30,20,10,70,40,60}为例:

如图,每一次排序把一个最大的数被放在了最后,然后按照这个趋势逐渐往前,直到按从小到大的顺序依次排序。

到了第4轮的时候,整个数据已经排序结束了,但此时程序仍然在进行。

直到第5,6,7轮程序才算真正的结束,这其实是一种浪费算力的表现

void bubble(int a[],int n) {for(int i=0; i<n; i++) {for(int j=0; j<n-i; j++) {if(a[j]>a[j+1]) {swap(a[j],a[j+1]);  //交换数据}}}
}

注意,由于C++的namespace std命名空间的使用,std自带了交换函数swap(a,b),可以直接使用,其功能是交换a与b的两个值,当然你可以自定义swap函数

其代码为

void swap(int &a, int &b) { //指定类型(整型)int temp = a;a = b;b = temp;
}

起泡排序算法及其算法的验证相关推荐

  1. java冒泡排序算法代码降序_冒泡排序(起泡排序)算法及其C语言实现

    起泡排序,别名"冒泡排序",该算法的核心思想是将无序表中的所有记录,通过两两比较关键字,得出升序序列或者降序序列. 例如,对无序表{49,38,65,97,76,13,27,49} ...

  2. 起泡排序算法_气泡排序算法

    起泡排序算法 When working with large databases, it is necessary to add the functionality to search for val ...

  3. 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

    题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序.直接插入排序.简单选择排序.快速排序.希尔排序.堆排序. (2)待排序表的表长不小于100:其中的数据要用伪随机数产生程序产生:至少要 ...

  4. 算法学习之路_起泡排序

    一. 起泡(bubblesort)排序 从前到后依此检查每一对相邻元素,一旦发现逆序即交换二者的位置,对于长度为n的序列,一共需要做n-1次遍历,这一过程称之为扫描交换.a_b为第一次遍历,b_c为第 ...

  5. 错误录入 算法_如何使用验证错误率确定算法输出之间的关系

    错误录入 算法 Monument (www.monument.ai) enables you to quickly apply algorithms to data in a no-code inte ...

  6. 起泡排序验证性实验(2)

    题目描述: 请创建一个一维整型数组用来存储待排序关键码,关键码从数组下标为1的位置开始存储,下标为0的位置不存储关键码.输入关键码的个数,以及各个关键码,采用起泡排序的方法对关键码数组进行排序,输出每 ...

  7. 【啊哈!算法】算法3:最常用的排序——快速排序

    [啊哈!算法]算法3:最常用的排序--快速排序        上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到 ...

  8. (第20讲)关于排序的各种算法的汇总的题目

    1.排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前 ...

  9. python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析

    本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...

最新文章

  1. ActiveMQ 持久化讯息数据库信息
  2. MaxCompute存储力持续升级,每年节省不止一个亿
  3. H2O_Hyper_V-master网页端管理程序源码
  4. seo代码优化工具_企业seo该怎么优化
  5. Visio 与 Access 2007 的集成应用
  6. 鸿蒙开发者大会邀请函,将召开史上最大规模开发者大会,华为抓紧调试“鸿蒙”系统...
  7. 在centos7中安装flutter,执行flutter --version时显示flutter的版本为v0.0.0 unknown
  8. 搜索引擎html和css,CSS样式对搜索引擎排名的影响
  9. java jquery时间问候语,js实现实时问候,不同时间显示不同问候语
  10. 管鲍计算机教室管理系统,管鲍多媒体电子教室
  11. 以太坊地址检测算法golang实现
  12. 完全理解android事件分发机制
  13. unity篇-官方序列化接口 ISerializationCallbackReceiver
  14. 安装Java Visualvm监控堆内存和参数说明
  15. C语言基础之3:数据与C
  16. web实训——3.12
  17. android计时器和倒计时
  18. C++ 使用海康威视SDK将视频推流到rtmp服务器
  19. 【SAP】ABAP——Web Service简介与配置方法
  20. 国产系统部署服务器,国产服务器操作系统取得重大突破

热门文章

  1. Java后端--25--内存数据库Redis讲解
  2. barbuttonitem 文字换行_ios开发 常用代码整理
  3. unity添加对象实例_在Unity中,如何通过值复制一个GameObject,以便在实例化之前修改它?...
  4. 在Unity内使用对象池并实现线程安全的单例模式
  5. MySQL表连接(join)
  6. 用html编写勾股定理,一种勾股定理演示器的制作方法
  7. windows下搭建OpenGL ES开发环境
  8. 关于OpenGL ES中的纹理压缩
  9. 3-AIV--使用ContentProvider获得所有图片路径
  10. 《黑客秘笈——渗透测试实用指南(第2版)》—第2章2.7节总结