归并排序

/*! @function ******************************************************************************** <PRE> 函数名 : Merge 功能 : 将两个数组合并 参数 : double * sortNumber,待排序数组,startIndex起始归并下标, int count1,第一个序列个数,int count2第二个序列个数 返回值 : void 抛出异常 : -------------------------------------------------------------------------------- 备注 : startIndex 起始下标 典型用法 : -------------------------------------------------------------------------------- 作者 : <xxx> </PRE> *******************************************************************************/ void Merge(double* sortNumber, int startIndex, int count1, int count2) { int i = 0; //copy the first part double * part1 = new double [count1]; for (i = 0; i < count1; i++) { part1[i] = sortNumber[startIndex + i]; } //copy the second part double * part2 = new double [count2]; for (i = 0; i < count2; i++) { part2[i] = sortNumber[startIndex + count1 + i]; } //merge int i1 = 0; int i2 = 0; for (i = startIndex; i < startIndex + count1 + count2; i++) { if (i1 < count1 && i2 < count2) { if (part1[i1] < part2[i2]) { sortNumber[i] = part1[i1++]; } else { sortNumber[i] = part2[i2++]; } } else if (i1 < count1) { sortNumber[i] = part1[i1++]; } else { sortNumber[i] = part2[i2++]; } } // release part1, part2 delete [] part1; delete [] part2; } /*! @function ******************************************************************************** <PRE> 函数名 : MergeSort 功能 : 归并排序 参数 : double * sortNumber,待排序数组,startIndex起始排序下标,int endIndex终止下标 返回值 : void 抛出异常 : -------------------------------------------------------------------------------- 备注 : 典型用法 : GetRandomNumber(count, randomNumber); MergeSort(randomNumber, 0, count-1); -------------------------------------------------------------------------------- 作者 : <xxx> </PRE> *******************************************************************************/ void MergeSort(double * sortNumber, int startIndex, int endIndex) { if (startIndex < endIndex) { int mid = (startIndex + endIndex)/2; MergeSort(sortNumber, startIndex, mid); MergeSort(sortNumber, mid + 1, endIndex); Merge(sortNumber, startIndex, mid - startIndex + 1, endIndex - mid); } }

你可能感兴趣的:(归并排序)