归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and
Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
归并操作的过程如下:
分类 | 排序算法 |
---|---|
数据结构 | 数组 |
最差时间复杂度 | |
最优时间复杂度 | |
平均时间复杂度 | |
最差空间复杂度 |
C 代码:
void merge_sort(int src[] , int len) { //第一层循环是确定归并的分组 for( int n = 1 ; n <= len ; n <<= 1 ) { //第二岑循环是结合第一层循环确定两个要合并的分组 for( int m = 0 ; m < len ; m += 2*n ) { //合并两个子分组 for( int nextTuple = m+n ; nextTuple < (m+n*2)>len?len:(m+n*2) ; nextTuple++ ){ for( int prevTuple = m ; prevTuple < nextTuple ; prevTuple++ ){ if( src[nextTuple] >= src[prevTuple] ){ int temp = src[nextTuple]; for(int k = nextTuple ; k > prevTuple ; k--) { src[k] = src[k-1]; } src[prevTuple] = temp; } } } } } }
运行结果:
原文:http://www.cnblogs.com/jvane/p/4494645.html