|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 svluo 于 2018-12-30 13:10 编辑
数据结构课的一个报告,照着小甲鱼老师的算法打的,希尔算法之前加了一个随机函数,输出出问题了。
ball ball大家帮我看一下吧 要截止了
//头文件
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <math.h>
#include <time.h>
//定义常量
#define Status int
#define TElemType char
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#define STACK_INIT_SIZE 1000
#define STACKINCREMENT 100
//随机数
void makeRan(int a[10]){
srand( (unsigned)time( NULL ) );
for( int i = 0; i < 10;i++ )
{
a[i]=rand()%100;
}
//printf( "%d\n", rand()%100+1);
}
//希尔排序(直接插入排序里加了一个gap,形成分组依据,然后进行排序)
void ShellInsert(int k[],int n)
{
int i, j, temp;
int gap =n;
do
{ gap = gap/3 + 1;
for(i=gap; i<n; i++)
{
if(k[i]<k[i-gap])
{
temp=k[i];
for (j=i-gap; k[j]>temp; j-=gap)
{
k[j+gap]=k[j];
}
k[j+gap]=temp;
}
}
}while(gap > 1);
}
//快速排序
void swap(int k[], int low, int high)
{
int temp;
temp=k[low];
k[low] =k[high];
k[high]= temp;
}
int Partition(int k[], int low, int high)
{
int point ;
point = k[low];
while (low <high )
{
while (low < high && k[high] >= point )
{
high--;
}
swap(k, low, high);
while (low < high && k[low] <= point )
{
low++ ;
}
swap(k, low, high);
}
return low;
}
void QSert(int k[], int low, int high)
{
int point;
if( low<high )
{
point =Partition(k, low, high);
QSert(k, low, point-1);
QSert(k, point+1, high);
}
}
void Quicksert(int k[], int n)
{
QSert( k, 0, n-1);
}
//输出函数
void showInfo(int a[10]){
printf("\n");
for(int i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("\n");
}
//主函数
int main()
{
int i=0;
while(true){
printf(" 1.快速排序 \n 2.希尔排序 \n 3.退出\n");
scanf("%d",&i);
switch (i){
case 1:
{ int a[10];
makeRan(a);
showInfo(a);
Quicksert(a,10);
printf("\n排序成功");
showInfo(a);
break;
}
case 2:
{
int a[10];
makeRan(a);
showInfo(a);
ShellInsert(a,10);
printf("\n排序成功");
showInfo(a);
break;
}
case 3:
break;
}
if(i==3) break;
}
return OK;
}
输出结果:
1.快速排序
2.希尔排序
3.退出
2
20 94 97 84 89 72 27 49 46 74
排序成功
20 46 49 74 84 89 94 97 32761 6480496 |
|