归并排序

来源:互联网 发布:依伊芭莎淘宝 编辑:程序博客网 时间:2024/05/18 09:50

1、要实现归并排序便要有递归的思想。

2、归并排序便是利用递归将数组里面的数每次取出一半再进行排序。

3、归并排序的最好、最坏和平均时间复杂度都是O(nlogn),而空间复杂度是O(n)

下面时实现代码

#include<iostream>#include<cstdio>using namespace std;int a[10] = {3,5,91,2,6,8,7,4,11,56};int b[10];void Merge(int a[],int s,int m,int e, int temp[]){int p = 0;int a1 = s, b1 = m+1;while(a1 <= m && b1 <= e)   //对两段数据进行排序 {if(a[a1] < a[b1]){temp[p] = a[a1];a1++;p++;}else{temp[p] = a[b1];b1++;p++;}}while(a1<=m)            {temp[p] = a[a1];p++;a1++;}while(b1<=e){temp[p] = a[b1];p++;b1++;}for(int i = 0; i < p; i++){a[s+i] = temp[i]; }}void MergeSort(int a[],int s,int e, int temp[]){if(s<e)      //用if语句判断当s>=e时自动return {int m = s+(e-s)/2;          //每次对数据进行平分 MergeSort(a, s, m, temp);MergeSort(a, m+1, e, temp);Merge(a, s, m, e, temp);}}int main(){MergeSort(a,0,9,b);for(int i = 0; i < 10; i++){cout << a[i] << " ";}cout << endl;return 0; } 


原创粉丝点击