Я пытаюсь написать код C ++ для алгоритма быстрой сортировки.Я использую указатель (*arr
) для хранения входного массива целых чисел.В функции main()
после вызова quickSort()
цикл for печатает отсортированный массив.
На выходе сортированный массив печатается, но программа ждет несколько секунд, а затем завершается, говоря: "* Процесс завершен через 19,07 секунд с возвращаемым значением 3221226356"
Это из-за malloc()
?
#include<bits/stdc++.h>
using namespace std;
void swap(int *arr,int a,int b)
{
int temp=*(arr+a);
*(arr+a)=*(arr+b);
*(arr+b)=temp;
}
int partition(int *arr,int n,int low,int high)
{
int i,pivot;
i=low-1;
pivot=*(arr+high);
for(int j=low;j<=high-1;j++)
{
if(*(arr+j)<pivot)
{
i++;
swap(arr,i,j);
}
}
swap(arr,i+1,high);
return i+1;
}
void quickSort(int *arr,int n,int low,int high)
{
if(low<high)
{
int pos;
pos=partition(arr,n,low,high);
cout<<"Partition for pos:"<<pos<<" ";
for(int i=0;i<n;i++)
{
cout<<*(arr+i)<<" ";
}
cout<<endl;
quickSort(arr,n,low,pos-1);
quickSort(arr,n,pos+1,high);
}
}
int main()
{
int n,*arr;
arr=(int*)malloc(n*sizeof(int));
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"Enter"<<endl;
cin>>*(arr+i);
}
quickSort(arr,n,0,n-1);
for(int i=0;i<n;i++)
{
cout<<*(arr+i)<<" ";
}
return 0;
}
Выход для n = 7 и входной массив {10,80, 30,90,40,50,70}:
7
Enter
10
Enter
80
Enter
30
Enter
90
Enter
40
Enter
50
Enter
70
Partition for pos:4 10 30 40 50 70 90 80
Partition for pos:3 10 30 40 50 70 90 80
Partition for pos:2 10 30 40 50 70 90 80
Partition for pos:1 10 30 40 50 70 90 80
Partition for pos:5 10 30 40 50 70 80 90
10 30 40 50 70 80 90
--------------------------------
Process exited after 19.07 seconds with return value 3221226356
Press any key to continue . . .