您的位置:首页 > 其它

排序之选择排序

2015-10-04 14:45 183 查看


       排序分为5类,本篇文章主要是研究选择排序,选择排序分为直接选择和堆排序。

       选择:每一步都从待排序的记录中选择出最小的,按顺序存放在已排好序的记录后。

直接选择排序:



第一趟:

         如上图初始状态为 3820 46 38 74 91 12 25,他们是带排序的记录,从待排序的记录中选择出最小的为12,按顺序存放在已排好序的记录后,因为还没有排好的序列,所以12就是第1个,和第一个38交换。

 

第二趟:

         第一趟结束后,未排序的为上图“第1趟”中除‘12’外的其他的黑色的记录,重复从待排序的记录中选择出最小的为12,按顺序存放在已排好序的记录后,剩余的最小的为20,要放在12的后面,本例中不用动20

 

第三趟……一直到所有的比较完毕,这个排序的过程形成一个三角形,如上图中红色区。

 

时间复杂度:

         如果带排序列有n个元素,第1趟要比较n-1次,第2趟n-2次吗,第n-1趟1次,所以排完所有的就要进行n(n-1)/2次,所以时间复杂度为O(n2)。

堆排序:

       堆排序是对直接选择排序的改进,减少比较的次数,提高效率,比较复杂的是在建堆的过程。

建堆



       1、  按照层的顺序先建好一个二叉树。从0开始对节点进行编码。

       2、  对于有n个元素的序列从 ⌊ n/2⌋-1(最后一个非叶子节点)开始比较,首先和其子节点,上图建的是小顶堆,所以如果比子节点小则交换,如果有两个子节点且都小于父节点,则将父节点和较小的节点交换。

       3、  然后比较上一个节点,直到建好堆。

 

取出堆中的元素



       将根节点和最后一个叶子节点交换,然后重新建堆。重复过程直到所有的节点输出。

 

小结:

         选择排序的中心思想就是“待排序的记录中选择出最小的,按顺序存放在已排好序的记录后”。堆排序是在直接排序上的一种改进,可以借助之前排序的结果,减少比较的次数,降低时间复杂度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息