您的位置:首页 > 编程语言

快速排序 冒泡排序 归并排序 堆排序 的主要代码

2015-06-22 09:12 573 查看
//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;

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: