1、基本排序
题目描述:
请编写程序对不超过50000个整数递增排序。
输入格式:
输入第一行一个正整数 n,表示待排序的元素个数。第二行为 n 个整数,表示待排序的元素。n 不超过50000。
输出格式:
输出为一行,表示排序结果,每个整数后一个空格。
输入样例:
5
5 4 3 2 1
输出样例:
1 2 3 4 5
#include<stdio.h>
int Partition(int R[],int m, int n)
{
int i,j,temp;
i=m;
j=n+1;
R[0]=R[m];
while(i<j)
{
i=i-1;
while(R[i]<=R[0]) i=i+1;
j=j-1;
while(R[j]>R[0]) j=j-1;
if(i<j)
{
temp=R[i];
R[i]=R[j];
R[j]=temp;
}
}
temp=R[m];
R[m]=R[j];
R[j]=temp;
return j;
}
void QSort(int R[],int m,int n)
{
int j;
if(m<n)
{
j=Partition(R,m,n);
QSort(R,m,j-1);
QSort(R,j+1,n);
}
}
int main()
{
int R[50000],i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&R[i]);
QSort(R,1,n);
for(i=1;i<=n;i++)
printf("%d ",R[i]);
printf("\n");
return 0;
}
2、快速排序
题目描述:
给定包含 n 个元素的整型数组a[1],a[2],...,a[n],利用快速排序算法对其进行递增排序,请输出排序过程,即每次 Partition 之后的数组,以及最后的排序结果。每次选择所处理的子数组的第一个元素作为基准元素。
输入格式:
输入为两行,第一行为一个整数 n (1<n≤1000),表示数组长度。第二行为 n 个空格间隔的整数,表示待排序的数组。
输出格式:
输出为若干行,每行依次输出 artition 后的数组,最后一行输出排序后的最终结果,每个元素后一个空格。
输入样例:
5
4 5 3 2 1
输出样例:
2 1 3 4 5
1 2 3 4 5
1 2 3 4 5
/**************在此输入您的代码*****************/
#include<stdio.h>
int k;
int Partition(int R[],int m, int n)
{
int i,j,temp;
i=m;
j=n+1;
R[0]=R[m];
while(i<j)
{
i=i-1;
while(R[i]<=R[0]) i=i+1;
j=j-1;
while(R[j]>R[0]) j=j-1;
if(i<j)
{
temp=R[i];
R[i]=R[j];
R[j]=temp;
}
}
temp=R[m];
R[m]=R[j];
R[j]=temp;
for(i=1;i<=k;i++)
printf("%d ",R[i]);
printf("\n");
return j;
}
void QSort(int R[],int m,int n)
{
int j;
if(m<n)
{
j=Partition(R,m,n);
QSort(R,m,j-1);
QSort(R,j+1,n);
}
}
int main()
{
int R[50000],i,n;
scanf("%d",&n);
k=n;
for(i=1;i<=n;i++)
scanf("%d",&R[i]);
QSort(R,1,n);
for(i=1;i<=n;i++)
printf("%d ",R[i]);
printf("\n");
return 0;
}