初级排序——冒泡排序

冒泡排序:从第一个数开始依此与下一个数进行比较,若后者大于前者,则二者换位,否则不进行操作;然后让第二个数与下一个进行比较;依此这样进行。一次大循环会将最大的那个数,放在后面;第二次大循环会将第二大的数放在倒数第二位;依次进行。最后便是有序的升序数列。

#include<bits/stdc++.h>
using namespace std;
const int maxn =101;
int main()
{
int n,a[maxn];
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
int i,j,k,s=0,temp;
for(i=0,j=0;i<n-j;j++)
{
for(k=1;k<n-j;k++,i++) //注意这里的i++,想想为什么会有这一步
if(a[i]>a[k]) temp=a[i],a[i]=a[k],a[k]=temp,s++;
i=0;
}
for(i=0;i<n-1;i++)
cout<<a[i]<<" ";
cout<<a[i]<<endl; //有序数列
cout<<s<<endl; //交换次数
return 0;
}

复杂度未O(n^2),在冒泡排序中的交换次数,也就是代码中的s是原数组的逆序数(体现一个数列的错乱程度)。

posted @ 2019-08-12 20:34  白菜茄子  阅读(165)  评论(0编辑  收藏  举报