//-------------五种排序算法演示
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "dos.h"
#define Max 100
typedef int sqlist[Max+1];
void insertsort(sqlist a,int n)
{
int i,j;
for(i=2;i<=n;i++)
{
if(a[i]<a[i-1])
{
a[0]=a[i];
for(j=i-1;a[0]<a[j];--j)
a[j+1]=a[j];
a[j+1]=a[0];
}
}
}
void shellsort(sqlist r,int n)
{
int i,j,gap,x;
gap=n/2;
while(gap>0)
{
for(i=gap+1;i<=n;i++)
{
j=i-gap;
while(j>0)
if(r[j]>r[j+gap])
{
x=r[j];
r[j]=r[j+gap];
r[j+gap]=x;
j=j-gap;
}
else j=0;
}
gap=gap/2;
}
}
void bubblesort(sqlist r,int n)
{
int i,j,w;
for(i=1;i<=n-1;i++)
for(j=n;j>=i+1;j--)
if(r[j]<r[j-1])
{
w=r[j];
r[j]=r[j-1];
r[j-1]=w;
}
}
void selectsort(sqlist r,int n)
{
int i,j,k,temp;
for(i=1;i<=n-1;i++)
{
k=i;
for(j=i+1;j<=n;j++)
if(r[j]<r[k]) k=j;
temp=r[i];
r[i]=r[k];
r[k]=temp;
}
}
int partion( sqlist a,int n,int low,int high)
{
int p,i;
p=a[low];
a[0]=a[low];
while(low<high)
{
while(low<high&&a[high]>=p) --high;
a[low]=a[high];
while(low<high&&a[low]<=p) ++low;
a[high]=a[low];
}
a[low]=a[0];
/* for(i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n\n");*/
return low;
}
void quicksort(sqlist a,int n,int low,int high)
{
int p,i;
if(low<high)
{
p=partion(a,n,low,high);
quicksort(a,n,low,p-1);
quicksort(a,n,p+1,high);
}
}
main()
{
int i,n=10;
char ch;
sqlist a;
for(i=1;i<=10;i++)
a[i]=11-i;
printf("\n\n");
printf(" ┌─────────────┐\n");
printf(" │ 1---插入排序 │\n");
printf(" │ 2---希尔排序 │\n");
printf(" │ 3---冒泡排序 │\n");
printf(" │ 4---选择排序 │\n");
printf(" │ 5---快速排序 │\n");
printf(" │ 请选择(1--5) │\n");
printf(" └─────────────┘\n");
ch=getchar();
if(ch=='1') {printf("插入排序的结果是:\n");insertsort(a,n);}
else if(ch=='2'){printf("希尔排序的结果是:\n");shellsort(a,n);}
else if(ch=='3'){printf("冒泡排序的结果是:\n");bubblesort(a,n);}
else if(ch=='4'){printf("选择排序的结果是:\n");selectsort(a,n);}
else if(ch=='5'){printf("快速排序的结果是:\n");quicksort(a,n,1,n);}
else printf("对不起,你选择的参数不对!");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
}