归并排序时间复杂度
归并排序时间复杂度是稳定的无论乱序还是有序都是O(nlogn)
归并代码
#include <iostream>
using namespace std;
const int N=1e5+10;
int arr[N];
int n;
int q[N];
void merge_sort(int arr[],int l,int r){
if(l>=r)return ;
int mid=(l+r)>>1;
//归并排序是 先进行递归 递归到 1一个时返回
//当递归到 两个元素时 就 比较 当前的两个的两小组将这两小组排序就可以.
merge_sort(arr,l,mid);
merge_sort(arr,mid+1,r);
int i=l,j=mid+1,k=0;
//需要多开一个数组存储
while(i<=mid && j<=r){
if(arr[i]<=arr[j])q[k++]=arr[i++];
else q[k++]=arr[j++];
}
while(i<=mid)q[k++]=arr[i++];
while(j<=r)q[k++]=arr[j++];
for(int i=l,j=0;i<=r;i++,j++)arr[i]=q[j];
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>arr[i];
}
merge_sort(arr,0,n-1);
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
}
原理
其实和快速排序差不多 但是 先进行递归 然后 再排序 两个相近的组
这样每次小的组有序 再跟着排稍大的组 自然 最大的组就有序了
点个赞吧 大佬们