第一题:交叉排序,本来以为很简单,结果没注意到题目的运行时间限制,哎,一直超时,不晓得原因,分别采用了冒泡、直接选择、快排,全部超时
冒泡:
#include <iostream>
using namespace std;
#define maxsize 1000
int 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 1000
int 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 1000
int 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;
}
第二题:
第三题: