二路归并排序mergeSort代码实现_legend
来源:互联网 发布:淘宝给差评被砍死 编辑:程序博客网 时间:2024/06/10 02:45
#include <iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
typedef int elementType;
/*将两个有序的数组[start,mid],[mid+1,end]2路合并
注意:此中由于是[start,mid],[mid+1,end]
所以while循环中均需要加上等号。
*/
void merge(elementType* array,int start,int mid ,int end){
elementType * tempArray=(elementType*)malloc((end-start+1)*sizeof(elementType));
if(!tempArray) reutrn ;
int index1=start;
int index2=mid+1;
int temp=0;
while(index1<=mid&&index2<=end){
if(array[index1]<=array[index2]){
tempArray[temp++]=array[index1++];
}
else{
tempArray[temp++]=array[index2++];
}
}
while(index1<=mid){
tempArray[temp++]=array[index1++];
}
while(index2<=end){
tempArray[temp++]=array[index2++];
}
for(index1=start,temp=0;temp<end-start+1;temp++)
array[index1++]=tempArray[temp];
free(tempArray);
}
/*
注意归并排序:对数组不断的进行划分,知道数组中只有一个元素时,这个时候数组就是有序的。
所以注意递归结束条件:只有一个元素即start=end
所以递归结构体的执行条件是:start<end
数组的范围是[start,end ](左闭右闭)
*/
void mergeSort(elementType* array,int start,int end){
if(start<end){
int mid=(end-start)/2+start;
mergeSort(array,start ,mid);
/*[start , mid ]*/
mergeSort(array,mid+1,end);
/*[mid+1,end]*/
merge(array,start,mid,end);
}
}
/*
display the array
*/
void display(elementType * array ,int length){
cout<<endl<<"display the array "<<endl;
for(int i=0;i<length;i++)
cout<<array[i]<<" ";
cout<<endl;
}
int main()
{
int length=8;
int from=0;
int end=10;
elementType * array=(elementType*)malloc(length*sizeof(elementType));
if(!array) return 0;
srand(time(0));
for(int i=0;i<length;i++){
array[i]=rand()%(end-from+1)+from;
}
display(array,length);
cout<<endl<<"mergeSort the array"<<endl;
mergeSort(array,0,length-1);
display(array,length);
cout << "Hello world!" << endl;
free(array);
return 0;
}
- 二路归并排序mergeSort代码实现_legend
- 归并排序 MergeSort Java代码
- 归并排序详解_legend
- 二路归并排序,C++代码实现
- 二路归并排序,C++代码实现
- MergeSort归并排序图文代码详解
- MergeSort-归并排序(C++实现)
- MergeSort-归并排序(C++实现)
- 归并排序法(MergeSort)c++实现
- 归并排序 MergeSort C语言实现
- 归并排序C语言实现MergeSort
- MergeSort(归并排序)算法Java实现
- 归并排序(MergeSort)Java实现
- 归并排序(Mergesort)之Java实现
- 归并排序(Mergesort)之Java实现
- Java实现算法归并排序(MergeSort)
- Java 归并排序(MergeSort)算法实现
- 归并排序(mergeSort)之递归实现
- 新媒体营销操作手法及案例分享-初贵民
- QT windows VS C++
- 查找大于100M的文件
- Android文件操作中的openFileOutPut和openFileInput
- Android下白盒自动化回归测试junit
- 二路归并排序mergeSort代码实现_legend
- 使用纯粹的C++语言编写COM组件
- HashMap存取过程中改变key值导致的内存泄露
- 用VC进行COM编程所必须掌握的理论知识
- 枚举进程句柄
- MySql数据库连接时DriverManager.getConnection(url,user,pass)出错
- 很期待ES6
- HashMap Hashtable区别
- 归并排序详解_legend