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");
}
}
#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语言实现简单的员工管理系统(新建、增、删、改、查、排序)
- <5>c语言实现ATM存取款系统(文件、排序)
- 快速排序c语言实现
- C语言直接插入排序和折半插入排序算法的实现
- 数据结构 C语言实现选择排序
- 快速排序,C语言实现
- 排序【8】之基数排序的C语言实现
- 字符排序(美团网笔试题)C语言实现
- 排序小结(1)-冒泡,快排(c语言实现)
- 经典排序思想,并用C语言指针实现排序算法
- 快速排序C语言算法实现
- C语言 学生管理系统(结构体实现)
- C语言分别实现冒泡排序、快速排序、选择排序
- 排序(2)---------简单插入排序(C语言实现)
- 用c语言实现冒泡排序,选择排序,快速排序
- PAT考试乙级1035(C语言实现)重点题目(排序)
- 归并排序的C语言实现
- C语言实现文本编辑器系统
- 排序(1)---------选择排序(C语言实现)
- 归并排序及C语言实现