c++ - 我写了一个快速排序代码,逻辑看起来很正确,但控制台上没有输出
问题描述
我写了一个快速排序代码,逻辑看起来很正确,但控制台上没有输出。
当只有索引函数运行时,输出是正确的,并且输出循环也是正确的,但是当添加了 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;
}
输出应该是排序数组
解决方案
代码需要两个修复。评论中指出的变化:
#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;
}
推荐阅读
- react-native - 使用 React 本机 Expo 时如何将数字格式化为货币?
- c - 字符串不在 C 中打印。即使使用 '\0' 字符
- android-motionlayout - 如何显示motionlayout android studio 设计工具?
- parquet - parquet-tools cat 命令返回“java.lang.ExceptionInInitializerError”
- java - 从第三个片段刷新第一个片段的列表
- python - 如何在 Django 中修复 URL 并不总是在没有斜杠的情况下重定向
- python - 如何在 Django 中重置数据库迁移?
- python - 如何解析这个嵌套的 JSON 对象?
- python - 如何计算列的平均值但仅包括某些行?
- java - HystrixRequestContext.getContextForCurrentThread() 变为 null