1040:As Easy As A+B

来源:互联网 发布:手机导航网站源码 编辑:程序博客网 时间:2024/06/08 04:56

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1040

方法:排序

思路:就是单纯的排序,偷懒的话那就用sort,不过借此机会应该好好熟悉一下常用的几种排序思路,我用的方法是快排,详细思路我看到的一篇博客已经讲得很好了,非常生动,我就做一回搬运工,链接如下:http://developer.51cto.com/art/201403/430986.htm

难点:多种方法排序(目前先更新快速排序)

#include<cstdio>using namespace std;const int N = 1000;int data[N],n;void quicksort(int left,int right){    if(left>right) return ;    int i,j,st;    i = left;    j = right;    st = data[left];    while(i!=j)    {        while(data[j]>=st&&i<j)            j--;        while(data[i]<=st&&i<j)            i++;        if(i<j)        {            int t = data[i];            data[i] = data[j];            data[j] = t;        }    }    data[left] = data[i];    data[i] = st;    quicksort(left,i-1);    quicksort(i+1,right);}int main(){    int t,i;    while(~scanf("%d",&t))    {        while(t--)        {            scanf("%d",&n);            for(i = 1;i <= n;i++)                scanf("%d",&data[i]);            quicksort(1,n);            for(i = 1;i <= n;i++)            {                if(i != n) printf("%d ",data[i]);                else printf("%d\n",data[i]);            }        }    }}

方法2:插入排序

最近看了MIT的算法导论的前导课,感觉还是很有意思的,自己动手实现了一下课程上讲的排序算法,当然了,上述快排已经详细说明了,在此不做赘述,现在看看插入排序的方法。

插入排序是一种最简单的,最原始的排序思想,就是假设某个数据之前都是排好序的数组,而后扫描每一个数据,如果数据大于某个数,那就将这个数插入到前面,其余数据依次顺延一位。注意,这里顺延一定要从后向前进行,否则会覆盖掉之前的数据。

#include<iostream>using namespace std;void insert_sort(int arry[],int num){    int i,j;    for(i = 1;i < num;i++)    {        int temp = arry[i];        for(j = i-1;j >= 0;j--)        {            if(arry[j] > temp)            {                arry[j+1] = arry[j];            }            else break;        }        arry[j+1] = temp;    }}int main(){    int arry[2000];    int n,t;    while(cin>>t)    {        while(t--)        {            cin>>n;            for(int i = 0;i < n;i++)            {                cin>>arry[i];            }            insert_sort(arry,n);            for(int i = 0;i < n;i++)            {                if(i == n-1)                    cout<<arry[i];                else                    cout<<arry[i]<<" ";            }            cout<<endl;        }    }    return 0;}


0 0
原创粉丝点击