C++ 我已经编写了一个快速排序代码,逻辑似乎非常正确,但控制台上没有输出

C++ 我已经编写了一个快速排序代码,逻辑似乎非常正确,但控制台上没有输出,c++,quicksort,C++,Quicksort,我已经编写了一个快速排序代码,逻辑似乎非常正确,但控制台上没有输出 当只有索引函数运行时,输出是正确的,输出循环也是正确的,但当添加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 <=

我已经编写了一个快速排序代码,逻辑似乎非常正确,但控制台上没有输出

当只有索引函数运行时,输出是正确的,输出循环也是正确的,但当添加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;
}
#包括
使用名称空间std;
整数索引(整数*a,整数s,整数e){
int i、j、启动、piv、温度;
开始=秒;
piv=a[e];

对于(i=start;i我认为在创建快速排序程序时,您会被bubblesort弄糊涂

快速排序思想是将向量分解为更小的向量,一个向量的数字大于轴e,另一个向量的数字小于轴

<>你应该在C++之类的数据结构中增加你的代码。 一个例子是,使用c++11:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <numeric>
#include <vector>

using namespace std;

vector<int> quicksort(vector<int> data) {
  if (data.size() == 1) return data;
  vector<int> small_numbers;
  vector<int> big_numbers;
  vector<int> ret;
  float pivot = accumulate(data.begin(), data.end(), 0.0) / data.size();

  for (int value : data) {
    if (value < pivot) {
      small_numbers.push_back(value);
    } else {
      big_numbers.push_back(value);
    }
  }
  if (small_numbers.empty()) return big_numbers;

  small_numbers = quicksort(small_numbers);
  big_numbers = quicksort(big_numbers);

  ret.insert(ret.end(), small_numbers.begin(), small_numbers.end());
  ret.insert(ret.end(), big_numbers.begin(), big_numbers.end());

  return ret;
}

int main() {
  vector<int> A({2, 5, 8, 3, 6, 9, 1, 4});

  A = quicksort(A);

  for (int value : A) cout << value << endl;

  return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
矢量快速排序(矢量数据){
if(data.size()==1)返回数据;
向量小_数;
向量大_数;
向量ret;
浮点轴=累加(data.begin(),data.end(),0.0)/data.size();
for(int值:数据){
如果(值<枢轴){
小数值。向后推(值);
}否则{
大数字。向后推(值);
}
}
if(small_numbers.empty())返回大_数;
小号=快速排序(小号);
大数字=快速排序(大数字);
ret.insert(ret.end(),small_numbers.begin(),small_numbers.end());
ret.insert(ret.end(),big_number.begin(),big_number.end());
返回ret;
}
int main(){
向量A({2,5,8,3,6,9,1,4});
A=快速排序(A);

对于(int-value:A)cout代码需要两个修复。注释中注意到的更改:

#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;
}
#包括
使用名称空间std;
整数索引(整数*a,整数s,整数e){
int i,start,piv;//j,未使用临时值
开始=秒;
piv=a[e];

对于(i=start;i听起来你可能需要学习如何使用调试器来逐步调试代码。有了一个好的调试器,你可以逐行执行你的程序,看看它偏离了你的预期。如果你要做任何编程,这是一个必不可少的工具。进一步阅读:你的程序会陷入一个无休止的循环中。S用更小、更随意的测试用例开始,比如
{1}
{1,2}
{2,1}
{1,1}
,…谢谢@blastfurne,如果向量充满了相同的值,我忘了停止!!Nit,用新行整理一下(例如
cout@DavidC.Rankin-我错过了编辑。答案现在更新了(使用std::endl而不是“\n”)。实际上有一篇关于使用
'\n'
v.
std::endl
@DavidC.Rankin的好文章。在这种情况下,它只在程序结束时出现一次,所以没什么大不了的。如果我在做I/O密集型工作,我通常使用带有大缓冲区的二进制文件I/O,而不进行转换(所以对于DOS/WIndows,它是回车符/换行符,无论语言使用何种语法),而不是流I/O。