您的位置:首页 > 编程语言 > C语言/C++

c语言实现的排序系统

2011-01-23 18:30 441 查看
#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");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: