数据结构学习笔记-排序3
来源:互联网 发布:知乎素食主义 编辑:程序博客网 时间:2024/04/28 14:36
归并排序
“归并”含义:将两个或两个以上的有序表组合成一个新的有序表。
一般使用的排序方法称为2-路归并排序。
含义:假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到(n/2向上取整)个长度为2或1的有序子序列;再两两归并,....,如此重复,直至得到一个长度为n的有序序列为止。
给出书上示例看得更清楚:
代码仍然出自:http://blog.csdn.net/ns_code/article/details/20306991学习了!
这里代码中用到了一个一维数组用来存放每次归并操作结束后的序列。
仍然手敲一遍,只有细微地方略有不同。
#include<stdio.h>#include<stdlib.h>void Merge(int *, int *, int, int);void MergeSort(int *, int *, int, int);void MSort(int *,int);void Merge(int *arr, int *brr, int start, int end){ //start,mid,end代表的是数组下标int i,j,k,mid;mid =(start+end)/2;i = start;j = mid+1;k = 0;while(i<=mid && j<=end){if(arr[i]<=arr[j])brr[k++] = arr[i++];elsebrr[k++] = arr[j++];}while(i<=mid)brr[k++] = arr[i++];while(j<=end)brr[k++] = arr[j++];/*for(i=0;i<k;i++)arr[i+start] = brr[i];*/for(i=start,k=0;i<=end;){arr[i++] = brr[k++];}}void MergeSort(int *arr, int *brr, int start, int end){if(start<end){int mid = (start+end)/2;MergeSort(arr,brr,start,mid);MergeSort(arr,brr,mid+1,end);Merge(arr,brr,start,end);}}void MSort(int *arr, int len){int *brr = (int *)malloc(len*sizeof(int));MergeSort(arr,brr,0,len-1);free(brr);brr = 0;}int main(){int i,arr[10] = {10,5,66,87,446,23,75,31,41,678};MSort(arr,10);for(i=0;i<10;++i)printf("%d ",arr[i]);return 0;}
0 0
- 数据结构学习笔记-排序3
- 数据结构学习笔记----排序
- 数据结构学习笔记九:排序
- 数据结构学习笔记-排序技术
- 数据结构学习笔记-排序2
- 数据结构学习笔记7-排序
- 【学习笔记----数据结构27-排序】
- 数据结构-排序(学习笔记)
- 《算法与数据结构》学习笔记 3-1 归并排序法
- 数据结构学习笔记 --- 排序(插入排序、希尔排序)
- 数据结构学习笔记 --- 排序(冒泡排序、快速排序)
- 数据结构学习笔记 --- 排序(选择排序、堆排序)
- 数据结构学习笔记 --- 排序(Gnome排序、梳排序)
- 数据结构学习笔记 --- 排序(插入排序、希尔排序)
- 数据结构学习笔记 --- 排序(冒泡排序、快速排序)
- 数据结构学习笔记 --- 排序(选择排序、堆排序)
- 数据结构学习笔记 --- 排序(Gnome排序、梳排序)
- 数据结构学习笔记 --- 图(拓扑排序)
- 羊村乱
- 【转载】C++与Java的语法区别
- Android XML转义字符
- POJ 2948 Martian Mining
- CompoundButton 选中/未选中状态的按钮
- 数据结构学习笔记-排序3
- Android取消EditText自动获取焦点默认行为
- 理想电感,非理想电感
- Discuz二次开发基本知识总结
- Scheme学习
- 舞动键盘,敲起我的第一篇博客
- sql语句之字符串匹配like
- PAT3-07. 求前缀表达式的值
- Hadoop Streaming如何传文件夹到集群