您的位置:首页 > 其它

起泡排序、快速排序、选择排序(树形、堆)

2018-03-08 17:45 183 查看
复习  给指定数组排
(约定数组包含N个数据,数组名为array)
起泡排序(升序):
(1):在array[0]位置设置一个标记,比较标记的数据元素以及右相邻元素值大小,若标记元素大于相邻元素则调换两者位置,否则不调换。将标记移动到array[1],继续之前操作直到标记移动到array[N-1]停止。这样一趟比较,处于末尾的数据即为数组最大值。(2):接下来继续(1)的操作,直到array[N-2]停止。因为最后一位已经是最大值所以不用比较。以此类推直到比较N-1趟后所得数组即为升序数组。
快速排序(升序):
(1):将array[0]设置为轴,从array[N-1]开始倒序遍历,直到寻找到比array[0]值小的元素,交换两者位置。然后再从array[0]开始正序遍历,直到找到比array[0] 大的元素。如此反复,直到最后数组满足,轴左边元素值都小于轴值,右边元素都大于轴值。
(2):将满足条件数组以轴为分界,分割成两个数组。分别对两个数组进行(1)操作。以此类推直到不可分割为止,所得即为升序。
选择排序:
树形:
(1):将数组元素当做二叉树最底层叶子节点,将左右叶子节点值较小的值作为父节点值。去掉最底层叶子节点,将剩下节点继续当做叶子节点向上缔结父节点,只到产生根节点,此时根节点值为最小值。
(2):重复(1)的操作,(去掉之前产生过的最小值叶子节点),以此类推直到,将所得最小值依次排列,即为升序。

堆:

大顶堆(1):将数组元素排列成一个完全二叉树,按叶节点不大于父节点的规则对二叉树进行调整(若大于则调换位置)。最后所得二叉树根节点即为最大值,每次调整完成之后即交换根节点与末尾叶节点位置。重复上述操作(调整时将已经获得的最大值节点排除在外),最后所得二叉树,节点即从上至下,从左至右递增。

小顶堆(2):将数组元素排列成一个完全二叉树,按叶节点不小于父节点的规则对二叉树进行调整(若小于则调换位置)。最后所得二叉树根节点即为最小值,每次调整完成之后即交换根节点与末尾叶节点位置。重复上述操作(调整时将已经获得的最小值节点排除在外),最后所得二叉树,节点即从上至下,从左至右递减。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: