归并排序

Posted 哇小明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。


void merge(int *data,int start,int end,int *result)


    int left_length = (end - start) / 2 + 1;//左部分区间的数据元素的个数
    int left_index = start;
    int right_index = start + left_length;
    int result_index = start;
    while(left_index < start + left_length && right_index < end+1)
    
        //对分别已经排好序的左区间和右区间进行合并
        if(data[left_index] <= data[right_index])
            result[result_index++] = data[left_index++];
        else
            result[result_index++] = data[right_index++];
    
    while(left_index < start + left_length)
        result[result_index++] = data[left_index++];
    while(right_index < end+1)
        result[result_index++] = data[right_index++];


void mergeSort(int *a,int start,int end,int *result)
    if(1 == end-start)
    
        if(a[start] > a[end])
            int tmp = a[start];
            a[start] = a[end];
            a[end] = tmp;
        
        else
            return;
    else if(start == end)
    
        return;
    else
        mergeSort(a,start,(end-start)/2+start,result);
        mergeSort(a,(end-start)/2+1+start,end,result);
        merge(a,start,end,result);
        for(int i = start;i <= end;++i)
            a[i] = result[i];
        
    

    return;





int main()
	int a[] = 20,30,90,40,70,110,60,10,100;
    int ilen = (sizeof(a)) / (sizeof(a[0]));
    //heapSortAsc(a, ilen);
    //HeapSort(a,ilen);
    int *result = new int[9];
    mergeSort(a,0,8,result);
		//...



以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章

常见排序算法之归并排序——归并排序

归并排序

归并排序(递归非递归以及自然归并排序)算法总结

排序算法——归并排序

归并排序(逆序数问题)详解

归并排序及其应用场景