基础算法
归并排序算法
- 算法思想:归并排序算法的基本思想是”分治法“,就是将原问题分解成规模更小的子问题,然后分别解决这些子问题,并且合并这些子问题的答案,最终建立原问题的答案。
1.787. 归并排序
-
题目描述
-
思想
-
-
代码
-
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; const int N = 1000010; int n; int q[N]; int tmp[N]; // l , r 代表排序数组的左右边界 void merge_sort(int q[] , int l , int r){ //如果数组中元素个数为空 或者只有一个的话 就直接返回 ,因为不需要排序 if( l >= r) return ; int mid = (l+r)/2; 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++]; //将tmp数组复制给q数组 for(i = l , j = 0 ; i <= r ; i++ , j++) q[i] = tmp[j]; } int main(){ scanf("%d" , &n); for(int i = 0 ; i < n ; i++){ scanf("%d", &q[i]); } merge_sort(q , 0 , n-1); for(int i = 0 ; i < n ; i++){ printf("%d " , q[i]); } return 0; }
-