简单选择排序
1 2 3 4 5 6 7 8 9 10 例题引入 49 38 65 97 49* 13 27 76 K=1 49>38
1 2 3 4 5 6 7 8 9 10 例题引入 49 38 65 97 49* 13 27 76 K=2 38<65
1 2 3 4 5 6 7 8 9 10 例题引入 49 38 65 97 49* 13 27 76 K=2 38<97
1 2 3 4 5 6 7 8 9 10 例题引入 49 38 65 97 49* 13 27 76 K=2 38<49*
1 2 3 4 5 6 7 8 9 10 例题引入 49 38 65 97 49* 13 27 76 K=2 38>13
1 2 3 4 5 6 7 8 9 10 例题引入 49 38 65 97 49* 13 27 76 K=6 38>13
1 2 3 4 5 6 7 8 9 10 例题引入 49 38 65 97 49* 13 27 76 K=6 13<27
1 2 3 4 5 6 7 8 9 10 例题引入 49 38 65 97 49* 13 27 76 K=6 13<76 第一趟排序结果:(13) 27 65 97 49* 49 38 76
以此类推: 第二趟排序结果:(13 27)65 97 49. 49 38 76 第三趟排序结果:(13 27 38)97 49 以此类推: 第二趟排序结果:(13 27)65 97 49* 49 38 76 第三趟排序结果:(13 27 38)97 49* 49 65 76 第四趟排序结果:(13 27 38 49*)97 49 65 76 第五趟排序结果:(13 27 38 49* 49)97 65 76 第六趟排序结果:(13 27 38 49* 49 65)97 76 第七趟排序结果:(13 27 38 49* 49 65 76)97 例题引入
void SelectSort(SqList &L) { for (i=1; i<L.length; ++i) { //在L.r[i..L.length] 中选择key最小的记录 k=i; for( j=i+1;j<=L.length ; j++) if ( L.r[j].key <L.r[k].key) k=j; if(k!=i) {t=L.r[i]; L.r[i]=L.r[k]; L.r[k]=t;} } 简单选择排序的算法
时间复杂度方面,简单选择排序所需进行记录移动的次数较少。最好情况下,也就是完全有序的情况下,不需要移动记录,最坏情况下需要移动3(n-1)次,也就是需要交换n-1次。 但是,在关键字比较方面,无论记录序列的初始状态如何,比较次数均为: KCN==n(n-1)/2≈n2/2 所以简单选择排序的时间复杂度是O(n2)。 算法效率
算法效率 空间复杂度方面,只有在进行记录交换时需要一个辅助空间,所以复杂度为O(n)。
(1)是不稳定的排序方法。 (2)可用于链式存储结构,这个时候在比较过程中,就不再是保存当前最小关键字的下标了,而是指针。 (3)移动记录次数较少,每一记录占用空间较多时,此方法比直接插入排序方法快。 简单选择排序算法的特点