您的位置:首页 > 编程语言 > C语言/C++

bubble_sort

2017-04-08 11:19 295 查看
C++代码如下:
#include <stdio.h>
int main(){
int n;
int buf[100];
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&buf[i]);
}
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(buf[j]>buf[j+1]){
int tmp=buf[j];
buf[j]=buf[j+1];
buf[j+1]=tmp;
}
}
}
for(int i=0;i<n;i++){
printf("%d ",buf[i]);
}
printf("\n");
}
return 0;
}

冒泡排序算法

思路:将相邻两个数比较,将小的调到前头;即每一趟比较并调整之后,最大的会放到最后。

    eg:6个数,需进行5趟比较;

  n个数,则需要进行n-1趟比较;

   第j需进行n-j次两两比较;

c程序代码如下:

#include <stdio.h>
void main(){
int n,i,j;
int buf[100];
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
scanf("%d",&buf[i]);
}
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
if(buf[j]>buf[j+1]){
int tmp=buf[j];
buf[j]=buf[j+1];
buf[j+1]=tmp;
}
}
}
for(i=0;i<n;i++){
printf("%d ",buf[i]);
}
printf("\n");
}
//return 0;
}

时间复杂度的估计:

1s的运行时间:即算法的时间复杂度不能超过百万级别,即不能超过一千万。

冒泡排序的时间复杂度为:O(n^2),若题中给的n的范围为(1<=n<=100),这样我们估计出n^2的数量级仅在万级别。

冒泡排序的空间复杂度为O(n),即大致需要100*32bit<32M

sort的使用:

升序排序代码如下:

#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int n;
int buf[1000];
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&buf[i]);
}
sort(buf,buf+n);
for(int i=0;i<n;i++){
printf("%d ",buf[i]);
}
printf("\n");
}
return 0;
}


降序排序代码如下:

#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int x,int y){//定义排序规则
return x>y;
}
int main(){
int n;
int buf[100];
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&buf[i]);
}
sort(buf,buf+n,cmp);//使用该重载形式,我们表明将要使用自己定义的排列规则;sort(排序起始地址,排序结束地址,比较函数)
for(int i=0;i<n;i++){
printf("%d ",buf[i]);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言