C语言------排序算法------归并排序(六)
2013-04-26 20:57
204 查看
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。
如 设有数列{6,202,100,301,38,8,1}
初始状态: [6] [202] [100] [301] [38] [8] [1] 比较次数
i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 3
i=2 [ 6 100 202 301 ] [ 1 8 38 ] 4
i=3 [ 1 6 8 38 100 202 301 ] 4
总计: 11次
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。
如 设有数列{6,202,100,301,38,8,1}
初始状态: [6] [202] [100] [301] [38] [8] [1] 比较次数
i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 3
i=2 [ 6 100 202 301 ] [ 1 8 38 ] 4
i=3 [ 1 6 8 38 100 202 301 ] 4
总计: 11次
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 16 int a , b ; void init_array(int l, int r) { int i; srand(time(NULL)); for(i = l; i <= r; i++) { a[i] = rand() % 100; } } void show_array(int l, int r) { int i; for(i = l; i <= r; i++) printf("%3d ", a[i]); printf("\n"); } #if 0 void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } #endif void meger(int l, int m, int r) { int i, j, k; for(i = l; i <= r; i++) b[i] = a[i]; i = l; j = m + 1; k = l; while(i <= m && j <= r) { if(b[i] < b[j]) a[k++] = b[i++]; else a[k++] = b[j++]; } while(i <= m) a[k++] = b[i++]; while(j <= r) a[k++] = b[j++]; } void meger_sort(int l, int r) { int m; if(l >= r) return; m = (l + r) / 2; meger_sort(l, m); meger_sort(m+1, r); meger(l, m, r); } int main(int argc, char **argv) { init_array(0, N-1); show_array(0, N-1); meger_sort(0, N-1); show_array(0, N-1); return 0; }
相关文章推荐
- 几种基本的排序算法(选择排序,冒泡排序,快速排序,归并排序,希尔排序)C语言实现
- 排序算法的C语言实现-归并排序
- 排序算法系列:归并排序(Merge sort)(C语言)
- 【排序算法】归并排序
- 排序算法——归并排序(Merge Sort)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 【排序算法模板】归并排序
- Java 排序算法-归并排序
- [排序算法] 归并排序
- C语言之归并排序
- 排序算法之快速排序(Quicksort) (C语言)
- 排序算法系列:计数排序(Counting sort)(C语言)
- 常用的排序算法性能分析(2)—— 归并排序、快速排序
- C语言四种排序算法完整程序
- C语言实现普通归并排序
- 常用的各种排序算法(C语言实现)
- C语言基本排序算法之桶式排序实例
- 排序算法的C语言实现-堆排序
- 排序算法(归并排序)