总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB
描述
对一组无序的整数用归并法进行排序。
输入
第一行为数列的总个数,第二行为待排序的数列
输出
排序后的数列
#include<iostream>
#include<algorithm>
using namespace std;
void Merge(int length,int First1,int Last1,int Last2,int data[])
{
int *temp=new int[length];
int i=First1,j=Last1+1,k=First1;
while(i<=Last1&&j<=Last2)
{
if(data[i]<=data[j])
temp[k++]=data[i++];
else
temp[k++]=data[j++];
}
while(i<=Last1)
temp[k++]=data[i++];
while(j<=Last2)
temp[k++]=data[j++];
for(i=First1;i<=Last2;i++)//把结果传回数组
data[i]=temp[i];
delete[] temp;
}
void Sort(int length,int First,int Last,int data[])
{
if(First==Last) return ;
else
{
int mid=(First+Last)/2;
Sort(length,First,mid,data);
Sort(length,mid+1,Last,data);
Merge(length,First,mid,Last,data);
}
}
int main()
{
int n,a[3000];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
Sort(n,0,n-1,a);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
描述
对一组无序的整数用快速排序法进行排序
输入
第一行为数列的总个数,第二行为待排序的数列
输出
排序后的数列
#include<iostream>
#include<algorithm>
using namespace std;
int Part(int First,int Last,int data[])
{
int i=First,j=Last;
while(i<j)
{
while(i<j&&data[i]<=data[j])
j--;//右侧扫描
if(i<j)
{
swap(data[i],data[j]);
i++;
}
while(i<j&&data[i]<=data[j])
i++;//左侧扫描
if(i<j)
{
swap(data[i],data[j]);
j--;
}
}
return i;
}
void Sort(int First,int Last,int data[])
{
if(First>Last) return ;
else
{
int privot=Part(First,Last,data);
Sort(First,privot-1,data);
Sort(privot+1,Last,data);
}
}
int main()
{
int n,a[3000];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
Sort(0,n-1,a);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}