【归并排序】c++实现归并排序
基本思想:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
平均时间复杂度:
最坏时间复杂度:
最好时间复杂度:
空间复杂度:
稳定性:稳定
程序代码:
#include<iostream> using namespace std; void merge(int a[], int start, int mid, int end) { int *tmp = (int *)malloc((end-start+1)*sizeof(int)); int i = start; int j = mid + 1; int k = 0; while(i <= mid && j <= end) { if (a[i] <= a[j]) tmp[k++] = a[i++]; else tmp[k++] = a[j++]; } while(i <= mid) tmp[k++] = a[i++]; while(j <= end) tmp[k++] = a[j++]; for (i = 0; i < k; i++) a[start + i] = tmp[i]; free(tmp); }; void mergeSort(int a[], int start, int end) { if(a==NULL || start >= end) return ; int mid = (end + start)/2; mergeSort(a, start, mid); mergeSort(a, mid+1, end); merge(a, start, mid, end); }; int main() { int a[13] = {7,1,3,6,8,2,4,9,5,0,10,12,11}; mergeSort(a,0,12); for(int i = 0 ; i < 13 ; i++) { cout<<a[i]<< ; } system("pause"); }
下一篇:
[算法]—快速幂算法及优化