You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

改编K&R版快速排序后随机崩溃,求排查int数组排序问题

问题:通用版快速排序适配int数组时崩溃/输出随机数

改编《C程序设计语言》(K&R,ANSI版5.11节)的快速排序示例,原示例用于排序char *lineptr[1000]类型的指针数组,现尝试排序int *p或int p[4]类型的int数组,希望保留最通用的参数设计,但程序会随机崩溃,执行后总是出现随机数。尝试过绕过比较函数、修改基准值、调整numcmp函数的多种版本,但都无效。仅当使用非通用的mqsort(int* p, int start, int right)版本时程序可正常运行。

相关代码

#include <stdio.h>
#include <stdlib.h>

#define MAXNUMS 4

int numcmp(int* a, int* b);
void mqsort(void* v[], int left, int right, int (*comp)(void*, void*));
void swap(void* v[], int i, int j);

int numcmp(int* a, int* b) {
  return *a - *b;
}

void swap(void* v[], int i, int j) {
  printf("swap befor %d: %d, %d: %d\n", i, v[i], j, v[j]);
  void* temp;
  temp = v[i];
  v[i] = v[j];
  v[j] = temp;
  printf("swap after %d: %d, %d: %d\n", i, v[i], j, v[j]);
}

void mqsort(void* v[], int left, int right, int (*comp)(void*, void*)) {
  int i, last;

  if (left >= right) {
    return;
  }

  printf("left %d, right %d\n", left, right);
  for (int j = 0; j < 4; j++) {
    printf("%d, ", v[j]);
  }
  printf("\n");
  swap(v, left, (left + right) / 2);

  last = left;
  for (i = left + 1; i <= right; i++) {
    if ((*comp)(v[i], v[left]) < 0) {
      ++last;
      swap(v, last, i);
    }
  }
  swap(v, left, last);
  for (int j = 0; j < 4; j++) {
    printf("%d, ", v[j]);
  }
  printf("\n");
  mqsort(v, left, last - 1, comp);
  mqsort(v, last + 1, right, comp);
}
int main(void) {
  int i;
  /* doesn't work :( */
  /* int* p; */
  /* int* p_start; */
  /* p_start = p = malloc(sizeof(int) * MAXNUMS); */
  /* if (p == NULL) { */
  /*   printf("cannot allocate"); */
  /*   exit(1); */
  /* } */
  /* *(p + 0) = 1; */
  /* *(p + 1) = 3; */
  /* *(p + 2) = 5; */
  /* *(p + 3) = 7; */

  int p[MAXNUMS] = {1, 3, 5, 7};

  for (i = 0; i < MAXNUMS; i++) {
    printf("%d, ", p[i]);
  }
  printf("\n");

  mqsort((void**)p, 0, MAXNUMS - 1, (int (*)(void*, void*))numcmp);

  for (i = 0; i < MAXNUMS; i++) {
    printf("%d, ", p[i]);
  }
  printf("\n");

  /* free(p); */
  /* free(p_start); */

  return 0;
}

内容的提问来源于stack exchange,提问作者qkzk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:33:30