我试图实现快速排序。但是控件似乎永远不会退出快速排序功能。任何帮助将非常感激。
几点建议:
- 我使用第一个元素作为枢轴。我知道存在更好、更有效的技术来选择支点,但这不是关于那个。
2.分区函数中的'k'变量是枢轴元素。
据我所知,问题出在分区函数上,因为我已经尝试过多次调试它。
此外,这不是家庭作业问题。我在自己学习后尝试实现该算法。
#include<iostream>
using namespace std;
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void readarray( int a[],int n)
{
cout<<"Enter elements for the array\n";
for(int i=0;i<n;i++)
cin>>a[i];
}
void printarray(int a[],int n)
{
cout<<"Elements are as follows\n";
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
int partition(int low,int high,int a[])
{
int i,j,k;
i=low;
j=high;
k=low;
while(i<=j)
{
while(a[i]<a[k])
i++;
while(a[j]>=a[k])
j--;
if(i<=j)
{
swap(a[i],a[j]);
i++;
j--;
}
}
if(i>j)
swap(a[k],a[j]);
return j;
}
void quicksort(int low,int high,int a[])
{
int k;
if(low<high)
{
k=partition(low,high,a);
quicksort(low,k-1,a);
quicksort(k+1,high,a);
}
}
int main()
{
int a[20];
int n;
cout<<"Enter the size of the array\n";
cin>>n;
readarray(a,n);
cout<<"Before sorting\n";
printarray(a,n);
quicksort(0,n,a);
cout<<"After sorting contents are\n";
printarray(a,n);
return 0;
}
在主要功能中,我尝试使用快速排序(0,n,a)和快速排序(0,n-1,a)。都没有奏效。