## **mooc十三周排序(下)**
#include <stdio.h>
#include<malloc.h>
#define Max 50000 /*N为数据量大小*/
void SelectSort(int R[],int N);
void Print(int R[],int N);
int main()
{
int *R,N,i;
scanf("%d",&N);
R=(int *)malloc((N+1)*sizeof(int));
for(i=1;i<=N;i++)
scanf("%d",&R[i]);
Print(R,N);
SelectSort(R,N);
Print(R,N);
return 0;
}
void Print(int R[],int N)
{
int i;
for (i=1;i<N;i++)
printf("%d,",R[i]);
printf("%d\n",R[N]);
}
void SelectSort(int R[],int N)
{
int i,j,temp,min;
for(i=1 ; i<N ; i++)
{
min=i;
for(j=i+1 ; j<=N ; j++)
{
if(R[j]<R[min])
min=j;
}
if(i!=min)
{
temp=R[i];
R[i]=R[min];
R[min]=temp;
}
Print(R,N);
}
return;
}
输入样例:
10
121 924 447 271 787 717 127 34 63 296
输出样例:
121,924,447,271,787,717,127,34,63,296
34,924,447,271,787,717,127,121,63,296
34,63,447,271,787,717,127,121,924,296
34,63,121,271,787,717,127,447,924,296
34,63,121,127,787,717,271,447,924,296
34,63,121,127,271,717,787,447,924,296
34,63,121,127,271,296,787,447,924,717
34,63,121,127,271,296,447,787,924,717
34,63,121,127,271,296,447,717,924,787
34,63,121,127,271,296,447,717,787,924
34,63,121,127,271,296,447,717,787,924
#include <stdio.h>
#include<malloc.h>
#define Max 50000 /*N为数据量大小*/
void MergeSort(int R[],int N,int low,int high);
void Merge(int R[],int N,int u,int m,int v);
void Print(int R[],int N);
int main()
{
int *R,N,i;
scanf("%d",&N);
R=(int *)malloc((N+1)*sizeof(int));
for(i=1;i<=N;i++)
scanf("%d",&R[i]);
MergeSort(R,N,1,N);
Print(R,N);
return 0;
}
void Print(int R[],int N)
{
int i;
for (i=1;i<N;i++)
printf("%d,",R[i]);
printf("%d\n",R[N]);
}
void MergeSort(int R[],int N,int low,int high)
{
int mid;
if (low<high)
{
mid=(low+high)/2;
MergeSort(R,N,low,mid);
MergeSort(R,N,mid+1,high);
Merge(R,N,low,mid,high);
}
}
void Merge(int R[],int N,int u,int m,int v)
{
int i=u,j=m+1,k=0;
int A[Max];
while(i<m+1||j<v+1)
{
if(i<m+1&&j<v+1)
{
if(R[i]<R[j])
A[k++]=R[i++];
else
A[k++]=R[j++];
}
else if(i>=m+1)
{
A[k++]=R[j++];
}
else
A[k++]=R[i++];
}
for(i=u ; i<=v ; i++)
R[i]=A[i-u];
return ;
}
输入样例:
10
121 924 447 271 787 717 127 34 63 296
输出样例:
34,63,121,127,271,296,447,717,787,924
#include <stdio.h>
#include<malloc.h>
#define Max 50000 /*N为数据量大小*/
int Partition(int R[],int low,int high);
void QuickSort(int R[],int N,int low,int high );
void Print(int R[],int N);
int main()
{
int *R,N,i;
scanf("%d",&N);
R=(int *)malloc((N+1)*sizeof(int));
for(i=1; i<=N; i++)
scanf("%d",&R[i]);
QuickSort(R,N,1,N);
Print(R,N);
return 0;
}
void Print(int R[],int N)
{
int i;
for (i=1; i<N; i++)
printf("%d,",R[i]);
printf("%d\n",R[N]);
}
void QuickSort(int R[],int N,int low,int high )
{
int p;
if (low<high)
{
p=Partition(R,low,high);
Print(R,N);
QuickSort(R,N,low,p-1);
QuickSort(R,N,p+1,high);
}
}
int Partition(int R[],int low,int high)
{
if(low>=high)
return NULL;
int i=low,j=high,k;
k=R[i];
while(i<j)
{
while(R[j]>=k&&i<j)
j--;
if(i<j)
R[i++]=R[j];
while(R[i]<=k&&i<j)
i++;
if(i<j)
R[j--]=R[i];
}
R[i]=k;
return i;
}
输入样例:
10
121 924 447 271 787 717 127 34 63 296
输出样例:
63,34,121,271,787,717,127,447,924,296
34,63,121,271,787,717,127,447,924,296
34,63,121,127,271,717,787,447,924,296
34,63,121,127,271,296,447,717,924,787
34,63,121,127,271,296,447,717,924,787
34,63,121,127,271,296,447,717,787,924
34,63,121,127,271,296,447,717,787,924