归并排序
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);
//...
以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章