快速排序和归并排序

关于快速排序和归并排序

#include <bits/stdc++.h>

using namespace std;

void quick_sort(int q[], int l, int r)
{
  if (l >= r) return;

  int i = l - 1, j = r + 1, x = q[l + r >> 1];
  while (i < j)
  {
    do i ++ ; while (q[i] < x);
    do j -- ; while (q[j] > x);
  if (i < j) swap(q[i], q[j]);
  }
  quick_sort(q, l, j), quick_sort(q, j + 1, r);
}

//快速排序模板

const int N=.....;

int tmp[N];

void merge_sort(int q[], int l, int r)
{
  if (l >= r) return;

  int mid = l + r >> 1;
  merge_sort(q, l, mid);
  merge_sort(q, mid + 1, r);

  int k = 0, i = l, j = mid + 1;
  while (i <= mid && j <= r)
  if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];
  else tmp[k ++ ] = q[j ++ ];

  while (i <= mid) tmp[k ++ ] = q[i ++ ];
  while (j <= r) tmp[k ++ ] = q[j ++ ];

  for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
 }

//归并排序模板

int main()
{
  int num;
  scanf("%d",&num);
  int p[num];
  int i=0;
  int j=0;
  for(i=0;i<num;i++){
    scanf("%d",&p[i]);
  }
  merge_sort(p,0,num-1);//quick_sort(p,0,num-1);
  for(j=0;j<num;j++){
    printf("%d ",p[j]);
  }
  return 0;
}

//实用

来源y总 acming网站

 

posted @ 2020-10-17 14:20  瓜子NEW-G  阅读(45)  评论(0)    收藏  举报