Я не могу найти проблему в своем коде. Он работает, но он не может правильно отсортировать массив. Я думаю, что часть, которая меня больше всего смущает, заключается в том, как передать несортированный субарер в рекурсивный процесс.quicksort не работает правильно
#include<iostream>
using namespace std;
void quickSort(int*, int, int);
int partition(int*, int, int);
int main(){
int const size = 10;
int a[size] = {37, 2, 6, 4, 89, 8, 10, 12, 68, 45};
for(int i=0; i<size; i++){
cout << a[i] << " ";
}
quickSort(a, 0, size-1);
cout << endl;
for(int i=0; i<size; i++){
cout << a[i] << " ";
}
}
void quickSort(int *array, int start, int end){
if(start<end){
int piv = partition(array, start, end);
quickSort(array, 0, piv-1);
quickSort(array, piv+1, end-1);
}
}
int partition(int *array, int start, int end){
int piv = array[start];
int i = start+1;
int j = end;
while(i<j){
while(array[i]<piv and i<end) i++;
while(array[j]>piv) j--;
if(i<j){
int temp = *(array+i);
*(array+i) = *(array+j);
*(array+j) = temp;
}
}
int temp = *array;
*array = *(array+j);
*(array+j) = temp;
return j;
}
Выход таков:
37 2 6 4 89 8 10 12 68 45
4 6 8 10 12 37 68 89 2 45
Вы можете посмотреть решение в этой теме: http://stackoverflow.com/questions/22504837/how-to-implement-quick-sort-algorithm-in-c – alway5dotcom
Я не уверен, что помогает OP с решением _his_. Я что-то пропустил? –