选择排序

选择排序算法

问题

使用选择排序法将数组按照升序排序法进行排序

步骤

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\)

优缺点

  • 数据移动次数最少,数据交换的次数与数组的大小成线性关系
  • 运行时间与数组的长度有关,与数数组初始化状态无关,每次交换之前都要遍历整个数组,且上一个状态与下一个状态无关,适用于数组长度不大且初始状态无明显顺序的情况.

posted on 2020-02-09 16:52  小毅哥哥Bob  阅读(104)  评论(0)    收藏  举报

导航