算法三连!!!
这次我要分享的是归并排序
归并排序的时间复杂度为:O(nlog2n),并且是一种稳定的排序算法
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
老样子接下来要分享的便是我写的归并排序
void merge(int* arr,size_t left,size_t pi,size_t right)
{
int i=left,j=pi+1,k=0;
//内部合并
int temp[right-left+1];
while(i<=pi && j<=right)
{
if(arr[i] < arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while(i<=pi) temp[k++] = arr[i++];
while(j<=right) temp[k++] = arr[j++];
for(int i=0;i<=(right-left);i++)
{
arr[i+left] = temp[i];
}
}
void _merge_sort(int* arr,size_t left,size_t right)
{
if(left >= right) return;
int pi = (left+right)/2; //pi为标杆的下标
_merge_sort(arr,left,pi);
_merge_sort(arr,pi+1,right);
merge(arr,left,pi,right);
}
void merge_sort(int* arr,size_t len)
{
_merge_sort(arr,0,len-1);
}
快速排序:https://blog.csdn.net/weixin_43505112/article/details/97298960
冒泡排序:https://blog.csdn.net/weixin_43505112/article/details/97297043
选择排序:https://blog.csdn.net/weixin_43505112/article/details/97515978
快速排序:https://blog.csdn.net/weixin_43505112/article/details/97298960
堆排序:https://blog.csdn.net/weixin_43505112/article/details/97516883