设为首页 加入收藏

TOP

快排、归并排序(分治)、堆排序(二)
2015-07-24 05:43:04 来源: 作者: 【 】 浏览:19
Tags:快排 归并 排序 (分治
id]递增有序,因此a[i~mid]与a[j]构成逆序对,共mid-i+1个 { temp[k++] = a[j++]; inversion += mid - i + 1; } } while (i <= mid) temp[k++] = a[i++]; while (j <= last) temp[k++] = a[j++]; memcpy(a + first, temp, sizeof(int) * (last - first + 1)); return inversion; } int MergeInversionR(int a[], int first, int last, int temp[]) { int inversion = 0; if (first < last) { int mid = (first + last) >> 1; inversion += MergeInversionR(a, first, mid, temp); //找左半段的逆序对数目 inversion += MergeInversionR(a, mid + 1, last, temp);//找右半段的逆序对数目 inversion += Merge(a, first, mid, last, temp); //在找完左右半段逆序对以后两段数组有序,然后找两段之间的逆序对。最小的逆序段只有一个元素。 } return inversion; } int MergeInversion(int a[], int n) { int inversion = 0; int *temp = new int[n]; memset(temp, 0, sizeof(int)*n); inversion = MergeInversionR(a, 0, n - 1, temp); delete []temp; return inversion; }

三、堆排序

见 利用堆实现堆排序&优先队列。



首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇uva 10620 - A Flea on a Chessbo.. 下一篇Struts1中ActionForward的技巧介绍

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: