选择排序
冒泡排序是通过两两比较并交换每次冒出一个最大的“泡泡”放在最后,而选择排序则是从待排序序列中选择一个最小的元素放在前面,只不过找最小元素的方法不同,选择排序包括简单选择排序和堆排序
简单选择排序
算法步骤
1.首先从arr[1..n]数组中选择一个最小的元素arr[k],arr[k]与arr[1]交换
2.第二趟排序,从r[2..n]中选择一个关键字最小的元素与r[2]交换
3.重复即可
注意:每次选择一个最小的元素和最前面的交换,其他元素不动
代码实现
void SimpleleSelectSort(int r[],int n)
{
int i,j,k,tmp;
for(int i = 0;i < n - 1; ++i)
{
k = i;
for(int j = i + 1; j < n; ++j)
if(r[j]<r[k]) k = j;
if(k != i) swap(r[i],r[k]);
}
}
算法复杂度分析
(1).时间复杂度
简单选择排序需要进行n-1趟排序,每趟排序n-i次比较,总的次数为:
简单选择排序的时间复杂度为O(n^2)
(2).空间复杂度
在交换时用了辅助空间tmp(swap的话不需要)为O(1)
(3)稳定性
不稳定