获取一个数组中第k大的元素算法(快速选择)

关于获取某个序列中第k大元素的算法,很直观的想法是对序列进行排序,然后直接取下标为k-1的元素的值即可,但是此种算法会有大量的冗余排序计算。本示例是基于快速排序算法演变而来的一种快速选择算法。我们知道在快速排序算法中每次递归都需要选择一个枢纽元,一般该枢纽元是选择为要排序的序列的中间元素,这里经过一次快速排序,枢纽元左边的元素都是小于枢纽元的,右边的元素都是大于枢纽元的,此时如果k-1小于枢纽元的下标,那么再只需要对枢纽元左边的元素进行递归;如果k-1大于枢纽元的下标,那么只需要对枢纽元右边的元素进行递归;如果k-1等于枢纽元的下标,那么枢纽元即为要求的值;如此反复。需要说明的是,如果在某个时刻,要递归的序列的长度小于一定值(这里取20),那么使用递归的快速排序没有直接使用插入排序快,因而,这里在小序列部分采用了插入排序算法,最终要求的值直接在已排序的序列中获取即可。 <无> .CodeEntity .code_pieces ul.piece_anchor{width:25px;position:absolute;top:25px;left:-30px;z-index:1000;}.CodeEntity .code_pieces ul.piece_anchor li{width:25px;background: #efe;margin-bottom:2px;}.CodeEntity .code_pieces ul.piece_anchor li{border-left:3px #40AA63 solid;border-right:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li:hover{border-right:3px #40AA63 solid;border-left:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li a{color: #333;padding: 3px 10px;}.CodeEntity .code_pieces .jump_to_code{visibility:hidden;position:relative;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code{visibility:visible;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code a{text-decoration:none;}.CodeEntity .code_pieces h2 i{float:right;font-style:normal;font-weight:normal;}.CodeEntity .code_pieces h2 i a{font-size:9pt;background: #FFFFFF;color:#00A;padding: 2px 5px;text-decoration:none;}

获取一个数组中第k大的元素算法(快速选择)

相关文章:

你感兴趣的文章:

标签云: