鱼C论坛

 找回密码
 立即注册
查看: 2725|回复: 1

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

[复制链接]
发表于 2018-12-30 13:10:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-30 13:18:18 | 显示全部楼层
ball ball 大家帮我看一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 15:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表