排序算法(3)——选择排序

选择排序(Selection Sort)

(1)算法思想

         给定待排序序列A[1..n],首先找出A中最小的元素,将其与A[1]交换;然后找出A中次最小元素,将其与A[2]交换......以此类推,进行n-1次循环,即可找到A中最小的n-1个元素并将其放在对应的位置,最后一个元素自然是最大的元素。由于查找到相应大小的一个元素后就将其放到对应顺序的位置上,因此,查找元素可以按照以下方式进行搜索:查找A中最小元素在A[1..n]中查找最小元素,查找第2小的元素则在A[2..n]中查找最小元素,查找第3小的最小元素在A[3..n]中进行搜索……查找第n-1小的元素在A[n-1,n]查找最小元素。具体过程如下所示:


(2)伪代码

         SELECTION-SORT(A)

          1 n ←  length[A]

          2 for i ← 1 to n-1

          3      do key ← A[i]                            //key记录要查找的最小值

          4           index ←  i                             //index记录下标

          5           for j ← i+1 to n

          6                do if  A[j] < key

          7                     then key ← A[j]

          8                             index  ← j

          9          if  k ≠ i

          10             then A[i] ↔ A[index]


(3)代码实现

void SelectionSort(int A[],int n)
{
    int i,j;
    for(i=0;i<n-1;i++)
    {
        int key=A[i];
        int index=i;
        for(j=i+1;j<n;j++)
        {
            if(A[j]<key)
            {
                key=A[j];
                index=j;
            }
        }
        if(index!=i)
        {
            A[index]=A[i];
            A[i]=key;
        }
    }
}


 
(4)算法分析 

         a.选择排序的时间复杂度:Θ(n^2)

         b.选择排序是原地排序。

         c.选择排序不是稳定排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值