归并排序是创建在归并上的一种有效排序方法,说人话就是将目标数组分成许多小数组,将小数组分别进行排序后,再将小数组有序合成大数组的排序方法,其比较次数介于
和
之间【n为数组长度,各种复杂度详见百度百科
恩于是自己写了一个归并算法的头
#ifndef MERGESORT
#define MERGESORT
#endif
void MergeSort(int*,int,int);
void Merge(int* oriArr,int Arr_start,int Arr_end);
void Merge(int* oriArr,int Arr_start,int Arr_end) {
int tempArr[Arr_end-Arr_end+1];
int indexFirstArr=Arr_start,
indexSecondArr=(Arr_start+Arr_end)/2+1,
indexTempArr=Arr_start;
while(indexFirstArr!=(Arr_start+Arr_end)/2+1&&indexSecondArr!=Arr_end+1) //
if(oriArr[indexFirstArr]>oriArr[indexSecondArr])
tempArr[indexTempArr++]=oriArr[indexFirstArr++];
//Automatically add 1 to indexes for being used in the next term of loop
else
tempArr[indexTempArr++]=oriArr[indexSecondArr++];
while(indexFirstArr!=(Arr_start+Arr_end)/2+1)
tempArr[indexTempArr++]=oriArr[indexFirstArr++];
while(indexSecondArr!=Arr_end+1)
tempArr[indexTempArr++]=oriArr[indexSecondArr++];
//these two while loops add the left number to the tempArr
for(int i=Arr_start;i<=Arr_end;i++)
oriArr[i]=tempArr[i];
return;
}
void MergeSort(int oriArr[],int Arr_start,int Arr_end) {
if(Arr_start!=Arr_end) {
int Arr_mid=(Arr_start+Arr_end)/2;
MergeSort(oriArr,Arr_start,Arr_mid);
MergeSort(oriArr,Arr_mid+1,Arr_end);
Merge(oriArr,Arr_start,Arr_end);
}
return;
}
2018 / 9 / 28
噫现在再翻翻以前写的代码
写的跟 一样hhhhhhh
woc突然发现数组长度若为奇数会出现迷之错误:)
不想看QAQ虽然我学过C++
嗯嗯别看[Cry]
让我慢慢受它折磨!