C语言小白归并排序
来源:互联网 发布:苹果清除app缓存数据 编辑:程序博客网 时间:2024/06/06 02:38
归并排序采用分治法,排序速度快,排序中不改变输入顺序
主要思路一个数组进行二分,再将左右分别进行二分直至只有一个数(即有序),再合并数组使其有序,完成排序
看了好多代码还是对递归处有些模糊,下列代码为百度百科示范代码,写下备忘,还求大神指点代码中递归处如何理解
#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;}
0 0
- C语言小白归并排序
- 归并排序C语言
- 归并排序C语言
- C语言 归并排序
- 归并排序 C语言数据结构
- 归并排序 c语言实现
- 归并排序(C语言)
- 归并排序C语言实现
- 归并排序C语言实现
- 归并排序C语言代码
- 归并排序(C语言)
- 归并排序(C语言)
- 归并排序--C语言实现
- 归并排序C语言实现
- 归并排序--c语言实现
- 归并排序(c语言)
- C语言之归并排序
- C语言实现归并排序
- /bin、/sbin、/usr/bin、/usr/sbin 目录所放置的执行文件区别
- js中splice对数组的操作
- 图像处理 去模糊 去马赛克 软件
- 可变参数列表详解
- 用贪心算法背包问题,Java实现
- C语言小白归并排序
- Python 数字对象
- XMU 1613 刘备闯三国之三顾茅庐(一) 【并查集】
- WPF多线程UI更新——两种方法
- eclipse上安装spring tool suite插件的过程记录
- wilddog & arcgisAPI & vue-cli插件,天坑之路(三)
- LeetCode119. Pascal's Triangle II
- 南阳OJ 题目64:鸡兔同笼
- Java 实例