Я думаю, что вы запутались в пузырьковой сортировке при создании программы быстрой сортировки.
Идея быстрой сортировки состоит в том, чтобы разбить вектор на меньшие векторы, числа с числами, большими, чем точка, а другой, с числами, меньшими, чем точка.
Вы должны округлить свой код в структурах данных 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;
}
В этом примере вектор разбит на два вектора, а ось - это среднее значение значений вектора. Он вызывает функцию рекурсивно, пока не вызовет вектор размером 1 элемент.
Надеюсь, это подтолкнет вас к менее сложному способу быстрой сортировки.