首页 > 代码库 > 排序算法之简单选择排序
排序算法之简单选择排序
基本思想
在一组元素中选择具有最小排序码的元素,若它不是这组元素中的第一个元素,则将它与这组元素中的第一个元素对调;在未排序的剩下的元素中反复运行以上步骤,直到剩余元素仅仅有一个为止。
代码
private void selectSort(int[] a, int left, int right) {
for (int i = left; i < right; i++) {
int k = i;
int temp;
for (int j = i + 1; j <= right; j++) {
if (a[j] < a[k])
k = j;
}
if (k != i){
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
性能分析
- 时间复杂度
简单选择排序的排序码比較次数KCN <script id="MathJax-Element-25" type="math/tex">KCN</script>与元素的初始排列无关。第i趟选择具有最小排序码元素所需的比較次数总是
n?i?1 <script id="MathJax-Element-26" type="math/tex">n-i-1</script>次,如果整个待排序元素序列有n个元素。因此总的排序码比較次数为
<script id="MathJax-Element-27" type="math/tex; mode=display">KCN= \sum_{m=0}^{n-2}(n-i-1)=\frac{n(n-1)}{2}</script>KCN=∑m=0n?2(n?i?1)=n(n?1)2
元素的移动次数与元素序列的初始排列有关。在最好情况下。即当初始序列为有序时,无需移动元素;在最坏的情况下,即每一趟都要进行元素交换。所以平均情况下的时间复杂度为
O(n2) <script id="MathJax-Element-28" type="math/tex">O(n^2)</script>。 - 稳定性
简单选择排序是一种不稳定的排序方法。
排序算法之简单选择排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。