#c #arrays #data-structures #quicksort
Вопрос:
Я написал код быстрой сортировки на c , но он не работает. кто-нибудь может сказать мне, что не так с этим кодом? Всякий раз, когда я даю ввод, он не возвращает никаких выходных данных. пример:
5
5 4 3 6 2
Процесс завершен через 5,997 секунды с возвращаемым значением 3221225725 Нажмите любую клавишу, чтобы продолжить.. ..
почему он не возвращает никаких выходных данных? несмотря на то, что я проверял код много раз, но все равно я сталкиваюсь с той же проблемой
#include<iostream>
using namespace std;
void swap(int *a, int *b) //swap function
{
int c;
c=*b;
*b=*a;
*a=c;
}
int partition(int arr[], int i, int j) //partition function
{
int pivot=arr[j];
while(i<j) {
while(i<=pivot) {
i ;
}
while(j>=pivot) {
j--;
}
if(i<j) {
swap(amp;arr[i],amp;arr[j]);
}
}
swap(amp;pivot,amp;arr[j]);
return j;
}
void quicksort(int arr[], int i, int j) //quicksort function
{
if(i<j) {
int p;
p=partition(arr,i,j);
quicksort(arr,i,p-1);
quicksort(arr,p 1,j);
}
}
void print(int arr[],int n) //function to print the array
{
for(int i=0;i<n;i ) {
cout<<arr[i]<<" ";
}
}
int main()
{
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i ) {
cin>>arr[i];
}
int x=0,y=n-1;
quicksort(arr,x,y);
print(arr,n);
return 0;
}
Комментарии:
1. StackOverflow не является службой отладки. Что вы пытались сделать до сих пор, чтобы попытаться устранить это самостоятельно? Вы прошли через код с помощью настоящего отладчика? » это не работает » — неверное описание проблемы. Что именно не работает? Какой вклад в это вносится? Каков ожидаемый результат и каков фактический результат? Будьте конкретны.
2. Каждый раз, когда я вставляю ввод, он не выдает никаких выходных данных. Он просто говорит — Процесс завершен через 5,997 секунды с возвращаемым значением 3221225725 Нажмите любую клавишу, чтобы продолжить.. ..
3. наберите функцию быстрой сортировки, сначала возьмите ввод и распечатайте его, посмотрите, правильно ли он принимает ввод
4. Я уже пробовал это, и он правильно принимает ввод. @sittsering
5. Что должен сказать ваш компилятор
int arr[n];
, как только вы включите предупреждения?
Ответ №1:
Это должно быть while(arr[i]<=pivot)
вместо while(i<=pivot)
того, чтобы то же самое относится к j
int partition(int arr[], int i, int j)
{
int pivot=arr[j];
while(i<j) {
while(arr[i]<=pivot) {
i ;
}
while(arr[j]>pivot) {
j--;
}
if(i<j) {
swap(amp;arr[i],amp;arr[j]);
}
}
swap(amp;pivot,amp;arr[j]);
return j;
}
Комментарии:
1. Спасибо, @sittsering. Это помогло. Кроме того, я переоделся
while(arr[j]>=pivot)
while(arr[j]>pivot)
, и это сработало.