【华为机试】北京题2015.10.14

来源:互联网 发布:mysql导入xls文件 编辑:程序博客网 时间:2024/06/16 06:15

第一题:交叉排序,本来以为很简单,结果没注意到题目的运行时间限制,哎,一直超时,不晓得原因,分别采用了冒泡、直接选择、快排,全部超时

冒泡:

#include <iostream>using namespace std;#define maxsize 1000int main(){    int n=0,a[maxsize];int b[maxsize],c[maxsize];int k1=0,k2=0;    int i=0,j=0;    char ch=0;int temp=0;    while(ch!= '\n')    {        cin>>a[n++];        ch=getchar();    }for(i=0;i<n;i++){if(i%2==0){b[k1++]=a[i];}else{c[k2++]=a[i];}}for(i=0;i<k1;i++){for(j=0;j<k1-i-1;j++){if(b[j]>b[j+1]){temp=b[j];b[j]=b[j+1];b[j+1]=temp;}}}for(i=0;i<k2;i++){for(j=0;j<k2-i-1;j++){if(c[j]<c[j+1]){temp=c[j];c[j]=c[j+1];c[j+1]=temp;}}}k1=0,k2=0;for(i=0;i<n;i++){if(i%2==0){cout<<b[k1++]<<" ";}else{cout<<c[k2++]<<" ";}}cout<<endl;    return 0;}

直接选择:

#include <iostream>using namespace std;#define maxsize 1000int main(){    int n=0,a[maxsize];    int i=0,j=0;    char ch=0;int temp=0;int index=0;    while(ch!= '\n')    {        cin>>a[n++];        ch=getchar();    }for(i=0;i<n;i=i+2)    {        index=i;        for(j=i+2;j<n;j=j+2)        {            if(a[j]<a[index])                index=j;        }        if(index!=i)        {            temp=a[i];            a[i]=a[index];            a[index]=temp;        }    }for(i=1;i<n;i=i+2)    {        index=i;        for(j=i+2;j<n;j=j+2)        {            if(a[j]>a[index])                index=j;        }        if(index!=i)        {            temp=a[i];            a[i]=a[index];            a[index]=temp;        }    }for(i=0;i<n;i++)        cout<<a[i]<<" ";cout<<endl;    return 0;}

快排:

#include <iostream>using namespace std;#define maxsize 1000int b[maxsize],c[maxsize];void QuickSortA(int left, int right){    int i, j, t, temp;    if(left > right)            return;    temp = b[left];    i = left;    j = right;    while(i != j)    {        while(b[j] >= temp && i < j)        {            j--;        }        while(b[i] <= temp && i < j)        {            i++;        }        if(i < j)        {            t = b[i];            b[i] = b[j];            b[j] = t;        }    }    b[left] = b[i];    b[i] = temp;    QuickSortA(left, i - 1);    QuickSortA(i + 1, right);}void QuickSortB(int left, int right){    int i, j, t, temp;    if(left > right)            return;    temp = c[left];    i = left;    j = right;    while(i != j)    {        while(c[j] <= temp && i < j)        {            j--;        }        while(c[i] >= temp && i < j)        {            i++;        }        if(i < j)        {            t = c[i];            c[i] = c[j];            c[j] = t;         }    }    c[left] = c[i];    c[i] = temp;    QuickSortB(left, i - 1);    QuickSortB(i + 1, right);}int main(){    int n=0;int k1=0,k2=0;    int i=0,j=0;    char ch=0;int temp=0;    while(ch!= '\n')    {if(n%2==0){cin>>b[k1++];n++;}else{cin>>c[k2++];n++;}        ch=getchar();    }QuickSortA(0, k1 - 1);QuickSortB(0, k2 - 1);k1=0,k2=0;for(i=0;i<n;i++){if(i%2==0){cout<<b[k1++]<<" ";}else{cout<<c[k2++]<<" ";}}cout<<endl;    return 0;}

第二题:


第三题:




0 0
原创粉丝点击