合并排序C语言实现
来源:互联网 发布:js中foreach用法 编辑:程序博客网 时间:2024/05/17 20:25
include
include
include
define MAX_NUMBER 100
void OutPutData(int *piData, int iNoOfNumber)
{
int iTemp = 0;
if(piData == NULL || iNoOfNumber <= 0){ return;}printf("Total %d number:", iNoOfNumber);for(iTemp = 0; iTemp < iNoOfNumber; iTemp++){ printf("%d ", piData[iTemp]);}printf("\n");
}
void Merge(int *piData, int iBeginIndex, int iMidIndex, int iEndIndex)
{
int iLeftIndex = 0;
int iRightIndex = 0;
int iIndex = 0;
int *piLeftData = NULL;
int *piRightData = NULL;
do{ piLeftData = (int *)malloc((iMidIndex - iBeginIndex + 1) * sizeof(int)); if(NULL == piLeftData) { printf("===>[%s, %d]malloc failed!!!\n", __FUNCTION__, __LINE__); break; } for(iIndex = 0; iIndex < iMidIndex - iBeginIndex + 1; iIndex++) { piLeftData[iIndex] = piData[iBeginIndex + iIndex]; } piRightData = (int *)malloc((iEndIndex - iMidIndex) * sizeof(int)); if(NULL == piRightData) { printf("===>[%s, %d]malloc failed!!!\n", __FUNCTION__, __LINE__); break; } for (iIndex = 0; iIndex < iEndIndex - iMidIndex; ++iIndex) { piRightData[iIndex] = piData[iMidIndex + 1 + iIndex]; } iLeftIndex = 0; iRightIndex = 0; for(iIndex = 0; iIndex < iEndIndex - iBeginIndex + 1; iIndex++) { if(iLeftIndex < iMidIndex - iBeginIndex + 1 && iRightIndex < iEndIndex - iMidIndex) { if(piLeftData[iLeftIndex] < piRightData[iRightIndex]) { piData[iBeginIndex + iIndex] = piLeftData[iLeftIndex]; iLeftIndex++; } else { piData[iBeginIndex + iIndex] = piRightData[iRightIndex]; iRightIndex++; } } else { if(iLeftIndex < iMidIndex - iBeginIndex + 1) { piData[iBeginIndex + iIndex] = piLeftData[iLeftIndex]; iLeftIndex++; } if(iRightIndex < iEndIndex - iMidIndex) { piData[iBeginIndex + iIndex] = piRightData[iRightIndex]; iRightIndex++; } } }}while(0);if(piLeftData){ free(piLeftData); piLeftData = NULL;}if(piRightData){ free(piRightData); piRightData = NULL;}
}
void MergeSort(int *piData, int iBeginIndex, int iEndIndex)
{
int iMidIndex = 0;
if(iBeginIndex < iEndIndex){ iMidIndex = (iBeginIndex + iEndIndex) / 2; MergeSort(piData, iBeginIndex, iMidIndex); MergeSort(piData, iMidIndex + 1, iEndIndex); Merge(piData, iBeginIndex, iMidIndex, iEndIndex);}
}
int main(void)
{
int aiData[MAX_NUMBER];
int iTemp = 0;
setvbuf(stdout, NULL, _IONBF, 0);srand((unsigned int)(time(NULL)));for(iTemp = 0; iTemp < MAX_NUMBER; ++iTemp){ aiData[iTemp] = rand() % (MAX_NUMBER);}OutPutData(aiData, MAX_NUMBER);MergeSort(aiData, 0, MAX_NUMBER - 1);OutPutData(aiData, MAX_NUMBER);return EXIT_SUCCESS;
}
0 0
- C语言实现合并排序
- 合并排序C语言实现
- 合并排序的c语言实现
- c语言之合并排序实现
- C语言合并排序
- 【C语言】合并排序。
- 排序算法-合并排序(C语言实现)
- 合并排序(归并排序)的C语言实现
- mergesort合并排序(3种语言实现 c/java/python)
- 算法入门->合并排序->C/C++ 语言实现
- 合并排序算法介绍,以及C语言实现
- C语言之合并排序
- 算法导论(Introduction to Algorithms)之算法入门(插入排序与合并排序C语言实现)
- 【C语言】合并,排序两个链表
- C语言实现排序
- 读《算法导论》我来C语言实现(2)——合并排序
- 算法导论,合并排序,c实现。
- C语言实现中英文字幕合并
- eclipse或myeclipse去除所有调试断点
- 透明度
- Android中常见的热门标签的流式布局的实现
- 如何成为一名优秀的web前端工程师?
- java中Serializable接口的理解
- 合并排序C语言实现
- Jquery组件使用说明
- PJSIP2.5.5 linux下编译
- MDCC 2016参会总结
- JSPatch 的基础配置与使用
- CaysnPrinter Windows平台开发包接口说明文档及打印示例程序 - PrinterLibs For Windows_20160927
- Java并发编程(一) Java内存模型
- 学习java io流
- 给 DevOps 初学者的入门指南