选择排序
选择排序算法
问题
使用选择排序法将数组按照升序排序法进行排序
步骤
Step1: 初始化索引。Set i = 0,首位元素暂时记为最小元素,即i=min
Step2: 找到数组A[i,N]中最小的元素a
Step3: 比较首元素A[i]与a的大小,如果A[i]>a,交换两元素的位置。
Step4: Set i=i+1,迭代执行步骤2~3,直到i=N-1
代码实现
public static void SectionSort(A){
int N =A.length;
for(int i=0;i<N;i++)//交换
{
int min=i;
//迭代法求最小值
for(int j=i+1;j<N;j++>)
{
if(less(A[j],A[i]))
{
min=j;
}
}
exch(A,i,min);
}
}
算法性能分析
- 要点
时间和空间两个方面,在时间方面主要是看算法执行比较和交换算子的次数 - 比较和交换算子次数
对任意的i∈[0,N-1] 都有:1次交换和N-i-1次比较,故总共N次交换和 \((N-1)+(N-2)+...+3+2+1=N(N-1)/2~N^2/2\)
优缺点
- 数据移动次数最少,数据交换的次数与数组的大小成线性关系
- 运行时间与数组的长度有关,与数数组初始化状态无关,每次交换之前都要遍历整个数组,且上一个状态与下一个状态无关,适用于数组长度不大且初始状态无明显顺序的情况.
唯大英雄能本色,是真名士自风流!
浙公网安备 33010602011771号