风落平川 2023-12-05 23:08 采纳率: 96.7%
浏览 10
已结题

C语言快速排序函数纠错

C语言快速排序函数如下,运行结果空白,问题出在哪里?如何解决?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct{
    int key;
    int order;
}RedType;
typedef struct{
    RedType *data;
    int size;//可用长度
    int length;//当前长度
}LinkList;
Status InitList(LinkList &L)//创建顺序表
{
    if(!L.data) exit(OVERFLOW);
    L.data=(RedType*)malloc(MAX*sizeof(RedType));
    L.size=MAX;
    L.length=0;
    return 0;
}
Status ListWrite(LinkList &L)
{
    scanf("%d",&L.length);
    srand((unsigned int)time(NULL));
    for(i=1;i<=L.length;i++)
    {
        L.data[i].order=i;
        L.data[i].key=rand()%100+1;
    }
}
Status ListPrint(LinkList L)
{ 
  if(!L.data&&L.length==0) return ERROR;
  int i;
  for(i=1;i<=L.length;i++)
  {
     printf("%d号元素  %d\n",L.data[i].order,L.data[i].key);
  }
}
int Partition(LinkList &L,int low,int high)//一次分割算法
{
    
    L.data[0]=L.data[low];
    int pivotkey=L.data[low].key;
    while(low<high)
    {
        while(low<high&&L.data[high].key>=pivotkey)
            --high;
        L.data[low]=L.data[high];
        while(low<high&&L.data[low].key<=pivotkey)
            ++low;
        L.data[high]=L.data[low];
    }
    L.data[low]=L.data[0];
    return low;
}
void QSort(LinkList &L,int low,int high)//递归快速排序
{
    low=1;high=L.length;
    int pivotloc;
    if(low<high)
    {
      pivotloc=Partition(L,low,high);
      QSort(L,low,pivotloc-1);
      QSort(L,pivotloc+1,high);
    }
}
int main(void)
{
  LinkList L;
  InitList(L);
  ListWrite(L);
  printf("创建顺序表如下\n");
  ListPrint(L);
printf("快速排序如下\n");
  int low,high;
  QSort(L,low,high);
  ListPrint(L);
  return 0;
}
  • 写回答

13条回答 默认 最新

  • micthis 2023-12-06 09:04
    关注

    主要修改:
    一、
    注释掉函数void QSort(LinkList &L,int low,int high)中的low=1;high=L.length;
    二、
    main中注释掉int low,high;
    函数调用改成QSort(L,1,L.length);

    代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define MAX 100
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    typedef int Status;
    typedef struct{
        int key;
        int order;
    }RedType;
    typedef struct{
        RedType *data;
        int size;//可用长度
        int length;//当前长度
    }LinkList;
    Status InitList(LinkList &L)//创建顺序表
    {
        //if(!L.data) exit(OVERFLOW);
        L.data=(RedType*)malloc(MAX*sizeof(RedType));
        L.size=MAX;
        L.length=0;
        return 0;
    }
    Status ListWrite(LinkList &L)
    {
        scanf("%d",&L.length);
        srand((unsigned int)time(NULL));
        for(int i=1;i<=L.length;i++)
        {
            L.data[i].order=i;
            L.data[i].key=rand()%100+1;
        }
        return OK;
    }
    Status ListPrint(LinkList L)
    { 
      if(!L.data&&L.length==0) return ERROR;
      int i;
      for(i=1;i<=L.length;i++)
      {
         printf("%d号元素  %d\n",L.data[i].order,L.data[i].key);
      }
      return OK;
    }
    int Partition(LinkList &L,int low,int high)//一次分割算法
    {
        L.data[0]=L.data[low];
        int pivotkey=L.data[low].key;
        while(low<high)
        {
            while(low<high&&L.data[high].key>=pivotkey)
                --high;
            L.data[low]=L.data[high];
            while(low<high&&L.data[low].key<=pivotkey)
                ++low;
            L.data[high]=L.data[low];
        }
        L.data[low]=L.data[0];
        return low;
    }
    void QSort(LinkList &L,int low,int high)//递归快速排序
    {
        //low=1;high=L.length;
        int pivotloc;
        if(low<high)
        {
          pivotloc=Partition(L,low,high);
          QSort(L,low,pivotloc-1);
          QSort(L,pivotloc+1,high);
        }
    }
    int main(void)
    {
      LinkList L;
      InitList(L);
      ListWrite(L);
      printf("创建顺序表如下\n");
      ListPrint(L);
      printf("快速排序如下\n");
      //int low,high;
      QSort(L,1,L.length);
      ListPrint(L);
      return 0;
    }
    

    运行截图:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(12条)

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 赞助了问题酬金15元 12月5日
  • 创建了问题 12月5日

悬赏问题

  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题