为什么输出后变成了很多位
本帖最后由 svluo 于 2018-12-30 13:10 编辑数据结构课的一个报告,照着小甲鱼老师的算法打的,希尔算法之前加了一个随机函数,输出出问题了。{:5_100:}
ball ball大家帮我看一下吧 要截止了{:5_100:}
//头文件
#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){
srand( (unsigned)time( NULL ) );
for( int i = 0; i < 10;i++ )
{
a=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<k)
{
temp=k;
for (j=i-gap; k>temp; j-=gap)
{
k=k;
}
k=temp;
}
}
}while(gap > 1);
}
//快速排序
void swap(int k[], int low, int high)
{
int temp;
temp=k;
k =k;
k= temp;
}
int Partition(int k[], int low, int high)
{
int point ;
point = k;
while (low <high )
{
while (low < high && k >= point )
{
high--;
}
swap(k, low, high);
while (low < high && k <= 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){
printf("\n");
for(int i=0;i<10;i++){
printf("%d",a);
}
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;
makeRan(a);
showInfo(a);
Quicksert(a,10);
printf("\n排序成功");
showInfo(a);
break;
}
case 2:
{
int a;
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
20949784897227494674
排序成功
2046497484899497327616480496 ball ball 大家帮我看一下吧{:5_100:}
页:
[1]