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

时间:2022-04-30 00:55:21

选择排序(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]查找最小元素。具体过程如下所示:

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

(2)伪代码

         SELECTION-SORT(A)

          1 n ←  length[A]

          2 for i ← 1 to n-1

          3      dokey ← 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.选择排序不是稳定排序。