起泡排序算法及其算法的验证
题目描述:
请创建一个一维整型数组用来存储待排序关键码,关键码从数组下标为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;
}
冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢浮
到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名冒泡排序。
复杂度与稳定性
思路原理
以顺序为例
从第一个元素开始一个一个的比较相邻的元素,如果第一个比第二个大即
a[1]>a[2]
,就彼此交换。从第一对到最后一对,对每一对相邻元素做一样的操作。此时在最后的元素应该会是最大的数,我们也称呼
一遍这样的操作
为一趟冒泡排序。针对所有的元素重复以上的步骤,每一趟得到的最大值已放在最后,下一次操作则不需要将此最大值纳入计算。
持续对每次对越来越少的元素,重复上面的步骤。
直到所有的数字都比较完成符合
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;
}
起泡排序算法及其算法的验证相关推荐
- java冒泡排序算法代码降序_冒泡排序(起泡排序)算法及其C语言实现
起泡排序,别名"冒泡排序",该算法的核心思想是将无序表中的所有记录,通过两两比较关键字,得出升序序列或者降序序列. 例如,对无序表{49,38,65,97,76,13,27,49} ...
- 起泡排序算法_气泡排序算法
起泡排序算法 When working with large databases, it is necessary to add the functionality to search for val ...
- 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。
题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序.直接插入排序.简单选择排序.快速排序.希尔排序.堆排序. (2)待排序表的表长不小于100:其中的数据要用伪随机数产生程序产生:至少要 ...
- 算法学习之路_起泡排序
一. 起泡(bubblesort)排序 从前到后依此检查每一对相邻元素,一旦发现逆序即交换二者的位置,对于长度为n的序列,一共需要做n-1次遍历,这一过程称之为扫描交换.a_b为第一次遍历,b_c为第 ...
- 错误录入 算法_如何使用验证错误率确定算法输出之间的关系
错误录入 算法 Monument (www.monument.ai) enables you to quickly apply algorithms to data in a no-code inte ...
- 起泡排序验证性实验(2)
题目描述: 请创建一个一维整型数组用来存储待排序关键码,关键码从数组下标为1的位置开始存储,下标为0的位置不存储关键码.输入关键码的个数,以及各个关键码,采用起泡排序的方法对关键码数组进行排序,输出每 ...
- 【啊哈!算法】算法3:最常用的排序——快速排序
[啊哈!算法]算法3:最常用的排序--快速排序 上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到 ...
- (第20讲)关于排序的各种算法的汇总的题目
1.排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前 ...
- python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析
本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...
最新文章
- ActiveMQ 持久化讯息数据库信息
- MaxCompute存储力持续升级,每年节省不止一个亿
- H2O_Hyper_V-master网页端管理程序源码
- seo代码优化工具_企业seo该怎么优化
- Visio 与 Access 2007 的集成应用
- 鸿蒙开发者大会邀请函,将召开史上最大规模开发者大会,华为抓紧调试“鸿蒙”系统...
- 在centos7中安装flutter,执行flutter --version时显示flutter的版本为v0.0.0 unknown
- 搜索引擎html和css,CSS样式对搜索引擎排名的影响
- java jquery时间问候语,js实现实时问候,不同时间显示不同问候语
- 管鲍计算机教室管理系统,管鲍多媒体电子教室
- 以太坊地址检测算法golang实现
- 完全理解android事件分发机制
- unity篇-官方序列化接口 ISerializationCallbackReceiver
- 安装Java Visualvm监控堆内存和参数说明
- C语言基础之3:数据与C
- web实训——3.12
- android计时器和倒计时
- C++ 使用海康威视SDK将视频推流到rtmp服务器
- 【SAP】ABAP——Web Service简介与配置方法
- 国产系统部署服务器,国产服务器操作系统取得重大突破
热门文章
- Java后端--25--内存数据库Redis讲解
- barbuttonitem 文字换行_ios开发 常用代码整理
- unity添加对象实例_在Unity中,如何通过值复制一个GameObject,以便在实例化之前修改它?...
- 在Unity内使用对象池并实现线程安全的单例模式
- MySQL表连接(join)
- 用html编写勾股定理,一种勾股定理演示器的制作方法
- windows下搭建OpenGL ES开发环境
- 关于OpenGL ES中的纹理压缩
- 3-AIV--使用ContentProvider获得所有图片路径
- 《黑客秘笈——渗透测试实用指南(第2版)》—第2章2.7节总结