#include <iostream>
using namespace std;
//quick_sort
void quick(int *a,int start,int end)
{
if (start>=end) return;
int startx=start;
int endx=end;
int key=a[start];
while(start<end)
{
while(a[end]>=key&&start<end)
{
end--;
}
a[start]=a[end];
while(a[start]<=key&&start<end)
{
start++;
}
a[end]=a[start];
}
a[start]=key;
quick(a,startx,start-1);
quick(a,start+1,endx);
}
//merge_sort
void merge(int *a,int start,int mid,int end)
{
while(mid<=end)
{
int key=a[mid];
int j=mid;
while(key<a[j-1]&&j>start)
{
a[j]=a[j-1];
j--;
}
a[j]=key;
mid++;
}
}
void merge_sort(int *a,int start,int end)
{
if(start>=end) return;
int mid=(start+end)/2;
merge_sort(a,start,mid);
merge_sort(a,mid+1,end);
merge(a,start,mid+1,end);
}
void exch(int& a,int& b)
{
a=a^b;
b=a^b;
a=a^b;
}
bool less(int a,int b)
{
return a<b;
}
void fixdown(int *a,int k,int n)//从第k个位置开始向下堆化
{
int j;
while(2*k<=n)
{
j=2*k;
if(j<n&&less(a[j],a[j+1]))
j++;
if(!less(a[k],a[j]))
break;
exch(a[k],a[j]);
k=j;
}
}
void heap_sort(int *a,int n)
{
for(int i=n/2;i>=1;i--)
{
fixdown(a,i,n);
}
while(n>1)
{
exch(a[1],a[n]);
fixdown(a,1,--n);
}
}
int main()
{
int a[101];
for(int i=1;i<=100;i++)
{
a[i]=101-i;
}
heap_sort(a,100);//堆排序测试
for(int i=1;i<=100;i++)
cout<<a[i]<<",";
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
// quick(a,0,n-1);//快速排序测试
merge_sort(a,0,n-1);//归并排序测试
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
快排、归并排序、堆排序的实现
本文展示了三种常见的排序算法:快速排序、归并排序和堆排序的C++实现。通过示例代码,详细解释了每种排序算法的工作原理,包括主函数中的测试用例,方便读者理解和应用。
摘要由CSDN通过智能技术生成