#include<stdio.h>
/************************************************************************/
/*left---mid 排好序了的,但其中的个数可能不一样。 */
/*mid+1 -- right 排好序了的 */
/************************************************************************/
void Merge(int array_list1[],int array_list[], int left, int mid, int right)
{
int i;
int left_i = left;
int right_i = mid+1;//终于发现了...this error...
int tmp;
tmp = left;
while ((left_i <= mid)&&(right_i <= right))//结束条件,排完序列的条件。
{
if (array_list[left_i] <= array_list[right_i])
{
array_list1[tmp] = array_list[left_i];
left_i++;
}
else
{
array_list1[tmp] = array_list[right_i];
right_i++;
}
tmp++;
}
if (left_i > mid)//right还有剩余
{
for (i = right_i; i <= right; i++)
{
array_list1[tmp] = array_list[i];
tmp++;
}
}
if (right_i > right)//left 还有剩余
{
for (i = left_i; i <= mid; i++)
{
array_list1[tmp] = array_list[i];
tmp++;
}
}
for (i = left; i <= right; i++)
{
array_list[i] = array_list1[i];
}
}
void Mergesort(int left, int right, int array_list[], int array_list1[])
{
int mid = 0;
if (left < right)
{
mid = (left + right)/2;
Mergesort(left, mid, array_list, array_list1);
Mergesort(mid+1, right, array_list, array_list1);
Merge(array_list1,array_list, left, mid, right);
}
}
int main()
{
int i;
int array_list[6] = {3, 1, 4, 4, 44, 33};
int array_list1[6] = { 0, 0, 0, 0, 0, 0};
Mergesort(0, 5, array_list, array_list1);
for (i = 0; i<=5; i++)
{
printf("%d\n", array_list[i]);
}
return 0;
}
自己写的归并排序(源码)
最新推荐文章于 2023-06-19 07:00:00 发布