HDU-1040- As Easy As A+B-选择排序+冒泡排序

来源:互联网 发布:淘宝子账号登陆错误202 编辑:程序博客网 时间:2024/04/29 23:25

其实贴这道题目是为了给新手介绍一下这几个简单排序方法;

首先我们看一下选择排序,思路很简单,就是从第一个开始每次定位一个数,和数组中最大(最小)的数交换一下位置;

不过这是个不稳定排序算法;

#include<stdio.h>int a[1005];//  交换函数;void Swap(int &a,int &b){    int temp=a;    a=b;    b=temp;}int main(){    int n,t;    scanf("%d",&t);    while(t--){        scanf("%d",&n);        for(int i=0;i<n;i++) scanf("%d",&a[i]);        for(int i=0;i<n;i++){           //  选择排序;            for(int j=i+1;j<n;j++){                if(a[i]>a[j]) Swap(a[i],a[j]);            }        }        for(int i=0;i<n-1;i++) printf("%d ",a[i]);        printf("%d\n",a[n-1]);    }    return 0;}

恩,现在我们再看一下冒泡排序;

冒泡冒泡,顾名思义,跟鱼吐泡泡似的,越靠近水面越大;从第一个开始一次比较相邻两个数的大小,不符合顺序便交换顺序;

每一轮交换,便将最大(最小)的数“吐”出来了。。。

详细过程详解大家可以看一下这个链接,有案列分析:http://www.cnblogs.com/kkun/archive/2011/11/23/2260280.html

#include<stdio.h>int a[1005];//  交换函数;void Swap(int &a,int &b){    int temp=a;    a=b;    b=temp;}int main(){    int n,t;    scanf("%d",&t);    while(t--){        scanf("%d",&n);        for(int i=0;i<n;i++) scanf("%d",&a[i]);        for(int i=0;i<n;i++){           //  冒泡排序;            for(int j=0;j<n-i-1;j++){                if(a[j]>a[j+1]) Swap(a[j],a[j+1]);  //  交换临近两个数的顺序;            }        }        for(int i=0;i<n-1;i++) printf("%d ",a[i]);        printf("%d\n",a[n-1]);    }    return 0;}



 

0 0
原创粉丝点击