排序算法——冒泡排序
来源:互联网 发布:mac的音频剪辑软件 编辑:程序博客网 时间:2024/04/28 03:17
冒泡排序是一种交换排序方法,每次排序之后都会使最大值“沉底”,小值上升,因此成为冒泡排序。时间复杂度 : O(n^2),空间复杂度 : O(1)。
直接看代码:
#include<iostream>using namespace std;void printarr(int arr[],int n);void bubbleSort(int arr[],int n){int i,temp;for(i=0;i<n;i++){for(int j=1;j<n-i;j++){if(arr[j-1]>arr[j]){//swap(arr[j-1],arr[j]);temp=arr[j-1];arr[j-1]=arr[j];arr[j]=temp;}}cout<<"第"<<i<<"次排序结果"<<endl;printarr(arr,n);cout<<endl;}}void printarr(int arr[],int n){for(int m=0;m<n;m++){cout<<arr[m]<<" ";}}void main(){int array[]={3,8,5,9,7,6,2,1,10,4};bubbleSort(array,10);}上述代码运行结果是:
以上代码比较了10次,即使在第7次时我们已经排序完成,后面的比较依然进行;
如果用一个标志位flag来表示该次排序是否进行交换,我们可以预先知道排序是否完成,可提高排序算法效率;把bubbleSort函数改成以下形式:
void bubbleSort(int arr[],int n){int j,flag=1;int x,k=n-1;while((k>0)&&(flag==1)){flag=0;//for(j=0;j<k;j++)//if(arr[j]>arr[j+1])//{//flag=1;//x=arr[j];//arr[j]=arr[j+1];//arr[j+1]=x;//}for(j=1;j<=k;j++)if(arr[j-1]>arr[j]){flag=1;x=arr[j];arr[j]=arr[j-1];arr[j-1]=x;}cout<<"第"<<n-k<<"次排序结果"<<endl;printarr(arr,n);cout<<endl;k--;}}
由运行结果可知,通过加入标志位,可以在排序完成时提前结束排序算法,减少了比较次数。
0 0
- 排序算法—冒泡排序
- 【排序算法】——冒泡排序算法
- 排序算法1—插入排序、选择排序、冒泡排序
- 排序算法———冒泡排序
- 排序算法——冒泡法排序
- 排序算法——冒泡排序
- 排序算法——冒泡排序
- 排序算法——冒泡排序
- 排序算法总结——冒泡排序
- 经典排序算法——冒泡排序
- 排序算法1——冒泡排序
- 排序算法——冒泡排序
- c++排序算法——冒泡排序
- 算法——排序之冒泡排序
- 排序算法——冒泡排序
- 经典排序算法——冒泡排序
- 排序算法——冒泡排序
- 排序算法——冒泡排序
- 三层及winform前台页面 XmlHelper.cs Sqlhelper.cs AbstractSqlHelper.cs Com.cs 分页控件的后台代码
- 单链表(二)——链表的插入
- I/O与异常
- JVM分代垃圾回收策略的基础概念
- 数据结构(与算法)可视化
- 排序算法——冒泡排序
- Python 实现栈
- linux 系统编程1
- 单链表(三)——链表的删除
- JVM内存管理深入垃圾收集器与内存分配策略
- 个人学习笔记---linux内核同步办法的选择
- ios-清除本地缓存(三种方式)
- 关于校招笔试题目的思考
- IOS之Core Foundation框架和Cocoa Foundation框架区别