svluo 发表于 2018-12-30 13:10:23

为什么输出后变成了很多位

本帖最后由 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

svluo 发表于 2018-12-30 13:18:18

ball ball 大家帮我看一下吧{:5_100:}
页: [1]
查看完整版本: 为什么输出后变成了很多位