#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#define ARRAYLEN 10
#define MIN 0
#define MAX 2000
int CreateData(int arr[],int n,int min,int max) //创建一个随机数组,a保存生成的数据,n为数组元素的数量
{
int i,j,flag;
srand(time(NULL));
if((max-min+1)<n) return 0; //最大数与最小数之差小于产生数组的数量,生成数据不成功
for(i=0;i<n;i++)
{
do
{
arr[i]=(max-min+1)*rand()/(RAND_MAX+1)+min;
flag=0;
for(j=0;j<i;j++)
{
if(arr[i]==arr[j])
flag=1;
}
}while(flag);
}
return 1;
}
void InserSort(int a[],int n)
{int i,j,swap;
for(i=1;i<n;i++)
{swap=a[i];
for(j=i-1;j>=0&&swap<a[j];--j)
a[j+1]=a[j];
a[j+1]=swap;}
}
void ShellSort(int a[],int n)
{int d,i,j,x;
d=n/2;
while(d>=1)
{for(i=d;i<n;i++){x=a[i];
j=i-d;
while(j>=0&&a[j]>x){a[j+d]=a[j];j=j-d;}
a[j+d]=x;}d/=2;}}
void BubbleSort(int a[],int n)
{int i,j,swap,flag=0;
for(i=0;i<n-1;i++)
{for(j=n-1;j>i;j--)
{if(a[j-1]>a[j])
{swap=a[j];
a[j]=a[j-1];
a[j-1]=swap;
flag=1;}
}
if(flag==0)
break;
else
flag=0;
}}
int Division(int a[],int left, int right) //分割
{
int base=a[left];
while(left<right)
{
while(left<right && a[right]>base)
--right;
a[left]=a[right];
while(left<right && a[left]<base )
++left;
a[right]=a[left];
}
a[left]=base;
return left;
}
void QuickSort(int a[],int left,int right)
{int i;
if(left<right)
{i=Division(a,left,right);
QuickSort(a,left,i-1);
QuickSort(a,i+1,right);}}
void SelectSort(int a[],int n)
{
int i,j,t,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[k]>a[j]) k=j;
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
void HeapAdjust(int a[],int s,int n)//构成堆
{
int j,t;
while(2*s+1<n)
{
j=2*s+1 ;
if((j+1)<n)
{
if(a[j]<a[j+1])
j++;
}
if(a[s]<a[j])
{
t=a[s];
a[s]=a[j];
a[j]=t;
s=j ;
}
else
break;
}
}
void HeapSort(int a[],int n)//堆排序
{
int t,i;
for(i=n/2-1;i>=0;i--)
HeapAdjust(a, i, n);
for(i=n-1;i>0;i--)
{
t=a[0];
a[0] =a[i];
a[i] =t;
HeapAdjust(a,0,i);
}
}
void main()
{int i,j=1,a[ARRAYLEN];
for(i=0;i<ARRAYLEN;i++)
a[i]=0;
printf("/n/n");
printf(" 排序算法演示系统/n");
printf("/n");
printf(" 随机产生待排数/n/n");
if(!CreateData(a,ARRAYLEN,MIN,MAX))
printf("生成随机数不成功!/n");
printf("原数据:");
for(i=0;i<ARRAYLEN;i++)
printf("%d ",a[i]);
printf("/n/n");
printf(" *****************************/n");
printf(" **请选择你要采用的排序方法 **/n");
printf(" **-------------------------**/n");
printf(" **选择直接插入排序法请输入1**/n");
printf(" **选择希 尔 排序法请输入2**/n");
printf(" **选择冒 泡 法排序法请输入3**/n");
printf(" **选择快 速 排序法请输入4**/n");
printf(" **选择简单选择排序法请输入5**/n");
printf(" **选择 堆 排序法请输入6**/n");
printf(" **退 出 系 统 请 输 入0**/n");
printf(" **-------------------------**/n");
printf(" ** 选 择 操 作 (0~6):**");
printf(" /n *****************************/n");
while(j!=0){scanf("%d",&j);
switch(j)
{case 1:
InserSort(a,ARRAYLEN);
printf("排序后:");
for(i=0;i<ARRAYLEN;i++)
printf("%d ",a[i]);
break;
case 2:
ShellSort(a,ARRAYLEN);
printf("排序后:");
for(i=0;i<ARRAYLEN;i++)
printf("%d ",a[i]);
break;
case 3:
BubbleSort(a,ARRAYLEN);
printf("排序后:");
for(i=0;i<ARRAYLEN;i++)
printf("%d ",a[i]);
break;
case 4:
QuickSort(a,0,ARRAYLEN-1);
printf("排序后:");
for(i=0;i<ARRAYLEN;i++)
printf("%d ",a[i]);
break;
case 5:
SelectSort(a,ARRAYLEN);
printf("排序后:");
for(i=0;i<ARRAYLEN;i++)
printf("%d ",a[i]);
break;
case 6:
HeapSort(a,ARRAYLEN);
printf("排序后:");
for(i=0;i<ARRAYLEN;i++)
printf("%d ",a[i]);
break;
case 0:
printf(" ------------------------------/n");
printf("欢迎使用本系统,再见(*^__^*)/n");
break;
default:printf("输入错误,请退出系统/n");}
printf("/n");
}
}
c语言实现的排序系统
最新推荐文章于 2022-09-05 18:35:06 发布