首页 > 解决方案 > 我写了一个快速排序代码,逻辑看起来很正确,但控制台上没有输出

问题描述

我写了一个快速排序代码,逻辑看起来很正确,但控制台上没有输出。

当只有索引函数运行时,输出是正确的,并且输出循环也是正确的,但是当添加了 quicSort 函数时,就没有输出了。

#include <iostream>
using namespace std;
int index(int* a, int s, int e) {
  int i, j, start, piv, temp;
  start = s;

  piv = a[e];

  for (i = start; i <= e; i++) {
    if (a[i] <= piv) {
      temp = a[i];
      a[i] = a[start];
      a[start] = temp;
      start++;
    }
  }

  return start;
}

void quickSort(int* a, int s, int e) {
  int pivot;
  if (s < e) {
    pivot = index(a, s, e);
    quickSort(a, s, pivot - 1);
    quickSort(a, pivot + 1, e);
  }
}

int main() {
  int A[] = {2, 5, 8, 3, 6, 9, 1, 4};
  quickSort(A, 0, 7);

  for (int i = 0; i < 8; i++) {
    cout << A[i];
  }

  return 0;
}

输出应该是排序数组

标签: c++quicksort

解决方案


代码需要两个修复。评论中指出的变化:

#include <iostream>
using namespace std;
int index(int* a, int s, int e) {
  int i, start, piv;            // j, temp not used
  start = s;

  piv = a[e];

  for (i = start; i <= e; i++) {
    if (a[i] < piv) {           // fix (not <=)
      swap(a[i], a[start]);     // simplify
      start++;
    }
  }
  swap(a[start], a[e]);         // fix (swap pivot into place)

  return start;
}

void quickSort(int* a, int s, int e) {
  int pivot;
  if (s < e) {
    pivot = index(a, s, e);
    quickSort(a, s, pivot - 1);
    quickSort(a, pivot + 1, e);
  }
}

int main() {
  int A[] = {2, 5, 8, 3, 6, 9, 1, 4};
  quickSort(A, 0, 7);

  for (int i = 0; i < 8; i++) {
    cout << A[i] << " ";        // put space beteen numbers
  }
  cout << endl;

  return 0;
}

推荐阅读