冒泡排序

冒泡排序和快速排序都属于交换排序,交换排序的基本思想:两两比较待排序的关键字,发现两个元素的次序相反时即进行交换,直到没有反序的元素为止

冒泡排序,也成为气泡排序,是一种典型的交换排序方法,其基本思想是:两比较待排序元素的关键字,发现两个元素的次序相反时即进行交换,直到没有反序的元素为止。快速排序之前也已经进行过记录,这里记录一下冒泡排序

    通过无序区中相邻元素间关键字的比较和位置的交换,使得关键字最小的元素如气泡一般逐渐往上“漂浮”直至“水面”。整个算法是从最下面的元素开始,对每两个相邻的关键字进行比较,且使关键字较小的元素换至关键字较大的元素之上,使得经过一趟冒泡排序后,关键字最小的元素到达最上端,接着,再在剩下的元素中找关键字次小的元素,并把它换到第二个位置上,以此类推,直到所有元素都有序为止。

冒泡排序的时间复杂度为O(2),是一种稳定的排序方法

举个例子说明一下排序过程

假设有一串数据 23,45,7,24,6,46,98,54,33,13升序排序

第一次:

234572464698543313

    首先23和45比较,23<45,满足升序条件,不交换位置.

234572464698543313

    45和7比较,45>7,次序相反,交换位置,此刻数据变为

237452564698543313

             45和25比较,45>25,次序相反,交换位置,此刻数据变为

237254564698543313

             45和6比较,45>6,次序相反,交换位置,此刻数据变为

237256454698543313

            45和46比较,45<46,满足升序条件,不交换位置.

237256454698543313

           46和98比较, 46<98,满足升序条件,不交换位置.

237256454698543313

           98和54比较,98>54,次序相反,交换位置,此刻数据变为

237256454654983313

            98和33比较,98>33,次序相反,交换位置,此刻数据变为

237256454654339813

            98和13比较,98>13,次序相反,交换位置,此刻数据变为

237256454654331398

第一次排序结束,找到了最大的一个元素,并将其放入了正确的位置。第二次找到第二大的元素放入对应的位置……以此类推,就能得到全部有序的列表

#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
  int n,temp;
  cout<<"n:";
  cin>>n;
  int *a=new int(n);
  //初始化
  cout<<"输入"<<n<<"个数:";
  for(int i=0;i<n;i++){
     cin>>a[i];
  }
 //冒泡排序
  for(int i=0;i<n-1;i++){
	  for(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;
		  }
	  }
  }
  cout<<"排序后为:";
  //输出
  for(int i=0;i<n;i++){
    cout<<a[i]<<" ";
  }
  cout<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值