📜  数据结构和算法选择排序

📅  最后修改于: 2021-01-11 10:22:42             🧑  作者: Mango


选择排序是一种简单的排序算法。此排序算法是一种基于就地比较的算法,其中,列表分为两部分,左端为已排序部分,右端为未排序部分。最初,已排序部分为空,未排序部分为整个列表。

从未排序的数组中选择最小的元素,并与最左边的元素交换,该元素成为排序数组的一部分。此过程继续将未排序的数组边界向右移动一个元素。

该算法不适用于大型数据集,因为其平均复杂度和最坏情况复杂度均为〇(n 2 ),其中n是项数。

选择排序如何工作?

以下面描述的数组为例。

未排序的数组

对于排序列表中的第一个位置,将依次扫描整个列表。当前存储14的第一个位置,我们搜索整个列表,发现10是最低值。

选择排序

因此,我们用10替换14。一次迭代10(恰好是列表中的最小值)出现在已排序列表的第一位置。

选择排序

对于第二个位置(33个位置),我们开始以线性方式扫描列表的其余部分。

选择排序

我们发现14是列表中第二低的值,它应该出现在第二位。我们交换这些值。

选择排序

经过两次迭代后,两个最小值以排序的方式位于开头。

选择排序

将相同的过程应用于数组中的其余项目。

以下是整个分类过程的图示-

选择排序

现在,让我们学习选择排序的一些编程方面。

算法

Step 1 − Set MIN to location 0
Step 2 − Search the minimum element in the list
Step 3 − Swap with value at location MIN
Step 4 − Increment MIN to point to next element
Step 5 − Repeat until list is sorted

伪码

procedure selection sort 
   list  : array of items
   n     : size of list

   for i = 1 to n - 1
   /* set current element as minimum*/
      min = i    
  
      /* check the element to be minimum */

      for j = i+1 to n 
         if list[j] < list[min] then
            min = j;
         end if
      end for

      /* swap the minimum element with the current element*/
      if indexMin != i  then
         swap list[min] and list[i]
      end if
   end for
    
end procedure

要了解有关使用C编程语言进行的选择排序实现的信息,请单击此处