排序算法——2
来源:互联网 发布:select算法 编辑:程序博客网 时间:2024/05/17 23:49
排序算法——2
- 归并排序(Merge Sort)
依旧先上源代码
#include <stdlib.h>#include <stdio.h>void Merge(int sourceArr[],int tempArr[], int startIndex, int midIndex, int endIndex){ int i = startIndex, j=midIndex+1, k = startIndex; while(i!=midIndex+1 && j!=endIndex+1) { if(sourceArr[i] > sourceArr[j]) tempArr[k++] = sourceArr[j++]; else tempArr[k++] = sourceArr[i++]; } while(i != midIndex+1) tempArr[k++] = sourceArr[i++]; while(j != endIndex+1) tempArr[k++] = sourceArr[j++]; for(i=startIndex; i<=endIndex; i++) sourceArr[i] = tempArr[i];}void MergeSort(int sourceArr[], int tempArr[], int startIndex, int endIndex){ int midIndex; if(startIndex < endIndex) { midIndex = (startIndex + endIndex) / 2; MergeSort(sourceArr, tempArr, startIndex, midIndex); MergeSort(sourceArr, tempArr, midIndex+1, endIndex); Merge(sourceArr, tempArr, startIndex, midIndex, endIndex); }}int main(int argc, char * argv[]){ int a[8] = {50, 10, 20, 30, 70, 40, 80, 60}; int i, b[8]; MergeSort(a, b, 0, 7); for(i=0; i<8; i++) printf("%d ", a[i]); printf("\n"); return 0;}
对于归并排序,我们可以把一列数排序,也可以把好多列数排序。
归并其实就是把这些数一个个分开,然后在一组组的有序的合并起来。
- 第一阶段
先讲需要的变量
int sourceArr[]
这个数组用来存放排好序的数字们,
int tempArr[]
这个数组用来暂时存放数据,
int startIndex, int midIndex, int endIndex
这个是开始,中点,终点;
midIndex = (startIndex + endIndex) / 2;
找到中点,然后一分为二,直到分成一个一个的,这时候第一阶段就算是完成了;
- 第二阶段
接下来是第二阶段,排序开始。
while(i!=midIndex+1 && j!=endIndex+1) { if(sourceArr[i] > sourceArr[j]) tempArr[k++] = sourceArr[j++]; else tempArr[k++] = sourceArr[i++]; } while(i != midIndex+1)
i 代表着前一块的数值下标,j 代表后面一段的下标
对于前后这两段的数值们,都先将指针放在第一个数值那里,然后,如果前面的大于后面的,就先将它放入temp数组里,暂时存一下,然后指针向后挪一个,以此类推,直至一方指针走到底,结束了第一段。
此时,其中一段会有剩余,接下来就将这段剩余一起放入temp数组。
这样,这两段就排好大小了,再把排好的放到source数组里存好。
一步步,直到最后排好。
这个样子,归并就结束了,来一个示意图:
好了,这个也结束了…
0 0
- 排序算法2——选择排序
- 排序算法2——快速排序
- 排序算法(2)——堆排序
- 排序算法——2
- 排序算法(2)—归并排序,快速排序
- 排序—插入排序算法
- 排序算法—快速排序
- 排序算法—插入排序
- 排序算法—归并排序
- 排序算法—快速排序
- 排序算法—堆排序
- 排序算法—归并排序
- 排序算法—选择排序
- 排序算法—冒泡排序
- 排序算法——堆排序算法
- 【排序算法】——冒泡排序算法
- 算法— —排序
- 算法——排序
- 分治算法
- Linux 的 Socket IO 模型
- python爬虫从0到1遇到问题及解决方向
- 数据结构之图(C++)--邻接矩阵表示(一)
- 【Android图像处理】lomo滤镜(效果)
- 排序算法——2
- QT多国语言测试程序
- 使用ssh-keygen,不用密码远程登录
- 总结
- 变量的存储类别详解二
- 解析plist 创建模型数据的正确理解
- Weex入门与进阶指南
- 文章标题
- 对指针的认识