#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
void create();
void InsertSort(int a[], int length);
void BubbleSort(int a[], int length);
void QKSort(int a[], int length);
void main() /*主函数即用户的操作界面*/
{
int b,flag=0; /*声明局部变量*/
while(1) /*循环输出以下信息*/
{
printf("**************************--------------------主菜单--------------------************************\n");
printf("***************-------------------------------排序-----------------************************\n");
printf(" 1.新建随机生成1000数 \n");
printf(" 2.直接插入排序法进行排序 \n");
printf(" 3.冒泡排序法进行排序 \n");
printf(" 4.快速排序法进行排序 \n");
printf(" 0.退出 \n");
printf(" 请输入选项0-4 \n");
printf(" 请输入你的选择:" );
scanf("%d",&b);
switch(b)
{
case 1:create();break;
case 2:InsertSort(int a[],int length);break;/*直接插入排序法*/
case 3:BubbleSort(int a[],int length);break;/*冒泡排序法*/
case 4:QKSort(int a[], int length);break; /*快速排序法进行排序*/
case 0:flag=1;break;/*退出SWITCH语句*/
default :printf("错误!");
}
if(flag) break; /*如果选择0就退出循环*/
}
}
void create()
{
int a[1000];
srand((unsigned)time(NULL));
for(int i=0;i<1000;i++)
{
a[i]=rand()%1000;printf("%d\t",a[i]);
if(i%10==0)
printf("\n");
}
}
void InsSort(int a[], int length)
/* 对记录数组r做直接插入排序,length为数组中待排序记录的数目*/
{
int i,j;
for (i=2;i<=length;i++)
{
a[0]=a[i]; /*将待插入记录存放到监视哨r[0]中*/
j=i-1;
while (a[0]< a[j] ) /* 寻找插入位置 */
{
a[j+1]= a[j];
j=j-1;
}
a[j+1]=a[0]; /*将待插入记录插入到已排序的序列中*/
}
} /* InsSort */
void BubbleSort(int a[], int length )
/*对记录数组r做冒泡排序,length为数组的长度*/
{
int n,i,j;
int change;
RecordType x;
n=length;
change=TRUE;
for ( i=1 ; i<= n-1 && change ;++i )
{
change=FALSE;
for ( j=1 ; j<= n-i ; ++j)
if (a[j]> a[j+1] )
{
x= a[j];
a[j]= a[j+1];
a[j+1]= x;
change=TRUE;
}
}
} /* BubbleSort */
void QKSort(int a[],int low, int high )
/*对记录数组r[low..high]用快速排序算法进行排序*/
{
int pos;
if(low<high)
{
pos=QKPass(a, low, high); /*调用一趟快速排序,将枢轴元素为界划分两个子表*/
QKSort(a, low, pos-1); /*对左部子表快速排序*/
QKSort(a, pos+1, high); /*对右部子表快速排序*/
}
}