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

//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;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值