| « | February 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
|
|
| [原码系列]九种排序原码(四)归并排序 |
|
void CSortDlg::MergeSort(int x[])
{
int temp_array[10];
int len=1;
while (len<10) { //归并排序
MergePass(x,temp_array,len);//一趟两路归并后归并项长度加倍
len*=2;
MergePass(temp_array,x,len);
len*=2;
}
// delete[] temp_array;
}
void CSortDlg::MergePass(int init_array[],int merge_array[],const int len)
{//一趟归并排序
int i=0;
while (i+2*len<=9) {//对长度为len的子表两两归并,直到表中剩余元素个数不足2*len为止
merge(init_array,merge_array,i,i+len-1,i+2*len-1);
i+=2*len;
}
if (i+len<=9)
merge(init_array,merge_array,i,i+len-1,9);
else
for (int j=i;j<=9;j++) {//若不能做归并,就复制
merge_array[j]=init_array[j];
}
}
void CSortDlg::merge(int init_array[],int merge_array[],const int l,const int m,const int n)
{
int i=l,j=m+1,k=l;
while (i<=m&&j<=n)
if (init_array[i]<=init_array[j]) {
merge_array[k]=init_array[i];
i++;k++;
}
else
{
merge_array[k]=init_array[j];
j++;k++;
}
if (i<=m)
for (int n1=k,n2=i;n1<=n&&n2<=m;n1++,n2++) {
merge_array[n1]=init_array[n2];
}
else
for (int n1=k, n2=j;n1<=n&&n2<=n;n1++,n2++) {
merge_array[n1]= init_array[n2];
}
}
| |
|
|
|
|
| 公告 |
人在上海不断的学技术,学生活,再苦再累也要坚持! |
| 统计 |
blog名称: 日志总数:20 评论数量:37 留言数量:0 访问次数:81023 建立时间:2006年7月5日 | |