歸併排序
基本思想
圖解過程
代碼實現
- 利用遞歸的思想將一個完整的數組分解成最小單位
- 注意最小區間的判定條件
- 注意區間劃分的邊界條件
void _MergeSort(int *array,int left,int right,int *arr){
if(right==left+1){
return;
}
if(left>=right){
return ;
}
int mid=(right-left)/2+left;
_MergeSort(array,left,mid,arr);
_MergeSort(array,mid,right,arr);
Merge(array,left,mid,right,arr);
}
void MergeSort(int *array,int size){
int* arr=new int[size];
_MergeSort(array,0,size,arr);
delete[] arr;
}
void Merge(int *array,int left,int mid,int right ,int* arr){
int size=right-left;
int _left_index=left;
int _right_index=mid;
int arr_index=0;
while(_left_index< mid && _right_index < right ){
if(array[_left_index]<= array[_right_index]){
arr[arr_index]=array[_left_index];
_left_index++;
}else{
arr[arr_index]=array[_right_index];
_right_index++;
}
arr_index++;
}
while(_left_index< mid){
arr[arr_index++]=array[_left_index++];
}
while(_right_index< right){
arr[arr_index++]=array[_right_index++];
}
for(int i=0;i<size;i++){
array[left+i]=arr[i];
}
}
測試
void TestSort(){
int array[]={1,3,7,9,6,4,54,76,34,66};
int size=sizeof(array)/sizeof(array[0]);
PrintArray(array,size);
MergeSort(array,size);
PrintArray(array,size);
int array1[]={66,44,33,22,11,9,8,7};
int size1=sizeof(array)/sizeof(array[0]);
Merge_Sort(array1,size1);
PrintArray(array1,size1);
}
int main(){
TestSort();
return 0;
}