首页 > 编程知识 正文

直接选择排序是否稳定,堆排序过程图解

时间:2023-05-03 09:54:19 阅读:147792 作者:1415

“选择排序”(Selection sort )是一种简单直观的排序算法。 这是一种从要排序的数据元素中首先选择最小(或最大)元素,将其放在序列的开头,然后在剩下的未排序元素中查找最小(大)元素,将其放在已排序序列的末尾的机制。 因此,在要排序的所有数据元素的数量都为零之前,选择排序是一种不稳定的排序方法。

实现原理和过程(包括图解)例如,选择n个数据“8、9、1、3、5、2、7、6”进行排序时,首先将第一个数认为是最小的数,分别比其他数小重复上述操作直到剩下的最后一个数。

以下,用图进行分析:

第一次更换后:

重复上述操作直到最后一个数

更换每个回合后的结果:

代码: # includeiostreamusingnamespacestd; voidselectionsort(inta[],int n ) {int t,flag; for(intI=0; 合1; I ) ) {flag=i; for(intj=I1; jn; j () if ) a[flag]a[j] ) flag=j; }t=a[i]; a[i]=a[flag]; a[flag]=t; }}int main () inta(8)={ 8,9,1,3,5,2,7,6 }; 选择(a,8 ); for(intI=0; i8; I ) couta[i]endl; 返回0; }

时间复杂性: o(n )选择排序必须遍历序列以找到峰元素,而不管原始序列是否反向,且所有比较操作均为n(n-1 )/2次; 更换操作的最佳情况为0次,最坏的情况为(n - 1 )次。 综上所述,最好、最坏、平均情况下的时间复杂度均为o(n );

但是,因为交换次数比冒泡排序少得多,交换操作所需的CPU时间比比较操作所需的CPU时间多,所以n的值小时,选择排序比冒泡排序快。

稳定性:

选择排序在排序过程中,当两个要素调换时,相同要素的前后顺序发生变化(例如顺序55729,当选择第一个路径时,第一个要素5与2调换,因此在原顺序中两个要素5的相对前后顺序被破坏)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。