随笔-174  评论-598  文章-0  trackbacks-0
归并排序的算法思想:把待排序序列分成相同大小的两个部分,依次对这两部分进行归并排序,完毕之后再按照顺序进行合并.

// 归并排序中的合并算法
void Merge(int array[], int start, int mid, int end)
{
    
int temp1[10], temp2[10];
    
int n1, n2;
    n1 
= mid - start + 1;
    n2 
= end - mid;

    
// 拷贝前半部分数组
    for (int i = 0; i < n1; i++)
    
{
        temp1[i] 
= array[start + i];
    }

    
// 拷贝后半部分数组
    for (int i = 0; i < n2; i++)
    
{
        temp2[i] 
= array[mid + i + 1];
    }

    
// 把后面的元素设置的很大
    temp1[n1] = temp2[n2] = 1000;
    
// 逐个扫描两部分数组然后放到相应的位置去
    for (int k = start, i = 0, j = 0; k <= end; k++)
    
{
        
if (temp1[i] <= temp2[j])
        
{
            array[k] 
= temp1[i];
            i
++;
        }

        
else
        
{
            array[k] 
= temp2[j];
            j
++;
        }

    }

}


// 归并排序
void MergeSort(int array[], int start, int end)
{
    
if (start < end)
    
{
        
int i;
        i 
= (end + start) / 2;
        
// 对前半部分进行排序
        MergeSort(array, start, i);
        
// 对后半部分进行排序
        MergeSort(array, i + 1, end);
        
// 合并前后两部分
        Merge(array, start, i, end);
    }

}

posted on 2006-07-04 01:34 那谁 阅读(711) 评论(0)  编辑 收藏 引用 所属分类: 算法与数据结构


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
.NET频道  博客园社区  闪存
网站导航: