//sort [l,r] in a
/**************************************************/
void selectSort(int*a,int l,int r){
for(int mi; l<r; ++l){
int mi=l;
for(int i=l+1; i<=r; ++i)
if(a[i]<a[mi]) mi=i;
swap(a[l],a[mi]);
}
}
/**************************************************/
// intervals [l,m] [m+1,r] are already sorted
void merge(int *a,int l,int m,int r){
int tmp[r-l+1];
for(int i=l,j=m+1,k=0; k<=r-l; ++k){
if(i>m) tmp[k]=a[j++];
else if(j>r) tmp[k]=a[i++];
else tmp[k]= a[i]<a[j]?a[i++]:a[j++];
}
for(int i=0;i<r-l+1;++i) a[l+i]=tmp[i];
}
void mergeSort(int *a,int l,int r){
if(l>=r)return;
int mid=l+(r-l)/2;
mergeSort(a,l,mid);
mergeSort(a,mid+1,r);
merge(a,l,mid,r);
}
/**************************************************/
void bubbleSort(int *a,int l,int r){
for(; l<r; r--)
for(int i=l; i<r; ++i)
if(a[i] > a[i+1])
swap(a[i],a[i+1]);
}
/**************************************************/
void insertSort(int*a,int l,int r){
for(int i=l+1; i<=r; ++i)
{
int x= a[i],j=i-1;
for( ;j>=0 && a[j]>x; --j) a[j+1]=a[j];
a[j+1]=x;
}
}
/**************************************************/
int partition(int *a,int l, int r){
int i, j;
for( i=l-1, j=l; j<r; ++j)
if( a[j] < a[r] )
swap(a[++i] , a[j]);
swap(a[i+1], a[r]);
return i+1;
}
void quickSort(int *a,int l,int r){
if(l>=r)return;
int mid=partition(a,l,r);
quickSort(a,l,mid-1);
quickSort(a,mid+1,r);
}
/*****************maximum_heap*********************/
void heapDown(int *a, int i,int n){
while(true){
int minIdx=i, lch=2*i+1, rch=lch+1;
if(lch<n && a[lch]>a[minIdx]) minIdx=lch;
if(rch<n && a[rch]>a[minIdx]) minIdx=rch;
if(minIdx==i) break;
swap(a[i] ,a[minIdx]);
i=minIdx;
}
}
void heapUp(int* a , int i, int n){
while(true){
int parent=(i-1)/2;
if(parent<0)break;
if(a[i] <=a[parent]) break;
swap(a[i], a[parent]);
i=parent;
}
}
void meakHeap(int *a, int n){
for(int i=(n-2)/2; i>=0; --i)
heapDown(a,i,n);
}
void heapSort(int *a,int n){
meakHeap(a,n);
while(n>1){
swap(a[n---1], a[0]);
heapDown(a,0,n);
}
}
<pre name="code" class="cpp">/*****************priority_queue*********************/
struct priorityQueue{
int siz=0;
int val[1000];
void push(int );
int pop();
};
void priorityQueue:: push(int x){
val[siz++]=x;
heapUp(val, siz-1,siz);
}
int priorityQueue:: pop(){
assert(siz>0);
int ret=val[0];
swap(val[0], val[siz---1]);
heapDown(val,0,siz);
return ret;
}