#include <stdio.h>
#define N 5
void Bubblesort(int a[])
{
int i,j,tmp;
for(i=1;i<N;++i)
for(j=1;j<N+1-i;++j)
if(a[j]>a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
for(i=1;i<=N;++i)
printf("%d ",a[i]);
printf("\n");
}
void Insertsort(int a[])
{
int i,j,tmp;
for(i=1;i<N;++i)
if(a[i+1]<a[i])
{
for(j=i+1;j>0;--j)
if(a[j]<a[j-1])
{
tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
else
break;
}
for(i=1;i<=N;++i)
printf("%d ",a[i]);
printf("\n");
}
int Partition(int a[],int low,int high)
{
int key=a[low];
while(low<high)
{
while(low<high&&key<=a[high])--high;
a[low]=a[high];
while(low<high&&key>=a[low])++low;
a[high]=a[low];
}
a[low]=key;
return low;
}
void Qsort(int a[],int low,int high)
{
if(low<high)
{
int key=Partition(a,low,high);
Qsort(a,low,key-1);
Qsort(a,key+1,high);
}
}
void Merge(int arr2[],int arr1[],int s,int mid,int e)
{
int k,j;
for(j=mid+1,k=s;s<=mid&&j<=e;++k)
{
if(arr2[s]<arr2[j])
{
arr1[k]=arr2[s++];
}
else
{
arr1[k]=arr2[j++];
}
}
while(s<=mid)
{
arr1[k++]=arr2[s++];
}
while(j<=e)
{
arr1[k++]=arr2[j++];
}
}
void MergeSort(int arr[],int arr1[],int arr2[],int s,int e)
{
if(s==e) arr1[s]=arr[s];
else
{
int mid=(s+e)/2;
MergeSort(arr,arr2,arr1,s,mid);
MergeSort(arr,arr2,arr1,mid+1,e);
Merge(arr2,arr1,s,mid,e);
}
}
int main()
{
int arr[N+1],arr1[N+1],arr2[N+1];
int i,flag;
printf("Input the unsorted numbers:\n");
for(i=1;i<=N;++i)
scanf("%d",&arr[i]);
printf("Input the method:\n");
printf("\t*******************************************************\n");
printf("\t* 1------------简单冒泡排序 *\n");
printf("\t* 2------------直接插入排序 *\n");
printf("\t* 3------------快速排序 *\n");
printf("\t* 4------------归并排序 *\n");
printf("\t*******************************************************\n");
scanf("%d",&flag);
switch(flag)
{
case 1:Bubblesort(arr);break;
case 2:Insertsort(arr);break;
case 3:Qsort(arr,1,N);
for(i=1;i<=N;++i)
printf("%d ",arr[i]);
printf("\n");break;
case 4:MergeSort(arr,arr1,arr2,1,N);
for(i=1;i<=N;++i)
printf("%d ",arr1[i]);
printf("\n");break;
}
return 0;
}
排序系列--待续。。。
最新推荐文章于 2024-05-26 16:17:55 发布