/**/

选择排序

首页 / 结构和算法入门教程 / 选择排序

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

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

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

选择排序

以下面描述的数组为示例。

Unsorted Array

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

Selection Sort

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

Selection Sort

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

Selection Sort

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

链接:https://www.learnfk.comhttps://www.learnfk.com/data-structures-algorithms/selection-sort-algorithm.html

来源:LearnFk无涯教程网

Selection Sort

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

Selection Sort

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

无涯教程网

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

Selection Sort

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

伪代码

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语言进行选择排序实现

#include <stdio.h>
#include <stdbool.h>

#define MAX 7

int intArray[MAX] = {4,6,3,2,1,9,7};

void printline(int count) {
   int i;
	
   for(i = 0;i < count-1;i++) {
      printf("=");
   }
	
   printf("=\n");
}

void display() {
   int i;
   printf("[");
	
   // navigate through all items 
   for(i = 0;i < MAX;i++) {
      printf("%d ", intArray[i]);
   }
	
   printf("]\n");
}

void selectionSort() {
   int indexMin,i,j;
	
   // loop through all numbers 
   for(i = 0; i < MAX-1; i++) { 
	
      // set current element as minimum 
      indexMin = i;
		
      // check the element to be minimum 
      for(j = i+1;j < MAX;j++) {
         if(intArray[j] < intArray[indexMin]) {
            indexMin = j;
         }
      }

      if(indexMin != i) {
         printf("Items swapped: [ %d, %d ]\n" , intArray[i], intArray[indexMin]); 
			
         // swap the numbers 
         int temp = intArray[indexMin];
         intArray[indexMin] = intArray[i];
         intArray[i] = temp;
      }          

      printf("Iteration %d#:",(i+1));
      display();
   }
}  

void main() {
   printf("Input Array: ");
   display();
   printline(50);
   selectionSort();
   printf("Output Array: ");
   display();
   printline(50);
}
Input Array: [4 6 3 2 1 9 7 ]
==================================================
Items swapped: [ 4, 1 ]
Iteration 1#:[1 6 3 2 4 9 7 ]
Items swapped: [ 6, 2 ]
Iteration 2#:[1 2 3 6 4 9 7 ]
Iteration 3#:[1 2 3 6 4 9 7 ]
Items swapped: [ 6, 4 ]
Iteration 4#:[1 2 3 4 6 9 7 ]
Iteration 5#:[1 2 3 4 6 9 7 ]
Items swapped: [ 9, 7 ]
Iteration 6#:[1 2 3 4 6 7 9 ]
Output Array: [1 2 3 4 6 7 9 ]
==================================================

这一章《选择排序》你学到了什么?在下面做个笔记吧!做站不易,你的分享是对我们最大的支持,感谢!😊

好记忆不如烂笔头。留下你的足迹吧 :)

猜你喜欢

推荐系统三十六式 -〔刑无刀〕

从0开始学架构 -〔李运华〕

.NET Core开发实战 -〔肖伟宇〕

分布式系统案例课 -〔杨波〕

通用联合类型执行交集类型的棘手输入问题

刺激控制器显示/隐藏工具箱但允许点击

在 C# 中,如何提取构成 UInt128 的两个 UInt64 值?

如何将一个 Composable 作为其参数传递给另一个 Composable 并在 Jetpack Compose 中显示/运行它

如何将一个 Composable 作为其参数传递给另一个 Composable 并在 Jetpack Compose 中显示/运行它

在事件中使用 Context/Toast 时不需要的重组 - Jetpack Compose

视频教程

数据结构和算法 - 130_树_红黑树_实现3 更多视频教程 »