随笔分类 -  算法 - 排序与查找

逆序对的计算
摘要:计算一个数组的逆序对,在归并排序的Merge函数中加入一个统计逆序对数的ans全局变量。 右边数组中出现了第一个小于左边某数的数,则计算左边指针可移动的剩余距离即为这次操作所求的逆序对数。(结合逆序对的定义) 1 /* 2 * 逆序对计算 3 */ 4 int ans = 0; 5 int help 阅读全文

posted @ 2020-04-18 21:16 Black_x 阅读(344) 评论(0) 推荐(0) 编辑

归并排序(分治)
摘要:经典的排序算法,经典的分治策略。 重点在于Merge函数对两部分已排序数组的合并。注意使用哨兵牌技巧。 1 /* 2 * 归并排序 3 */ 4 int helper_1[10005]; 5 int helper_2[10005]; 6 void merge(int arr[], int p, in 阅读全文

posted @ 2020-04-18 20:48 Black_x 阅读(165) 评论(0) 推荐(1) 编辑

乱序数组中第k大的数(顺序统计量)
摘要:该问题是顺序统计量中十分经典的问题。 使用快排中的分区法,将第k大的数排序。若双向扫描分区加上三点中值法或绝对中值法,可以保证在 O(n) 时间里找出第k大的数。 补充:可以直接使用C++STL中的nth_element函数(一定注意使用形式!!!!)。 1 /* 2 * 第k大的数 3 */ 4 阅读全文

posted @ 2020-04-18 16:34 Black_x 阅读(311) 评论(0) 推荐(0) 编辑

快速排序算法(三种分区方法要熟练!)
摘要:快排确实厉害!!! 总的思想是分治递归,取定一个值作为标签,比该值小的去左边,比该值大的去右边。 单向扫描分区法: 去左边的操作:只将sp++即可。 去右边的操作:具体是将sp指向的值与bigger指向的值交换。 考虑边界:当扫描指针sp与bigger相等时,再执行一次循环后,sp刚好在bigger 阅读全文

posted @ 2020-04-17 21:30 Black_x 阅读(1584) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 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 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示