/**
* 算法稳定性:假定在待排序的记录序列中,
* 存在多个具有相同的关键字的记录,若经过排序,
* 这些记录的相对次序保持不变,即在原序列中,ri=rj,
* 且ri在rj之前,而在排序后的序列中,
* ri仍在rj之前,则称这种排序算法是稳定的;
* 否则称为不稳定的。
*
* 快速排序:
* 最好情况 O(nlogn)
* 平均时间 O(nlogn)
* 最坏情况 O(n^2)
* 辅助储存 O(logn)
* 稳定性 不稳定
*
**/
#include <bits/stdc++.h>
using namespace std;
int Op(int *p,int s,int e)
{
int mid = p[s];
int indexN = s;
int indexP = e-1;
while(indexN < indexP){
while(indexN < indexP && p[indexP] >= mid) --indexP;
if(indexN < indexP) p[indexN++] = p[indexP];
while(indexN < indexP && p[indexN] < mid) ++indexN;
if(indexN < indexP) p[indexP--] = p[indexN];
}
p[indexN] = mid;
return indexN;
}
void QuickSort(int *p,int s,int e)
{
if(s < e){
int mid = Op(p,s,e);
QuickSort(p,s,mid);
QuickSort(p,mid+1,e);
}
}
int p[1005];
int main()
{
freopen("test.txt","r",stdin);
int N;
while(cin>>N){
for(int i=0;i<N;i++) cin>>p[i];
QuickSort(p,0,N);
for(int i=0;i<N;i++) cout<<p[i];
}
return 0;
}
快速排序模板 代码很清晰
最新推荐文章于 2022-01-13 17:54:17 发布