小工具知识网

当前位置: 首页 > 行业知识 > 常见排序算法之选择排序

行业知识

常见排序算法之选择排序

2026-11-13 23:29:17 来源:互联网转载

目录

一、选择排序

1.1 什么是选择排序?

1.2 思路

1.2.1 思路一

1.2.2 优化思路

1.3 C语言源码

1.3.1 思路一

1.3.2 优化思路

二、堆排序


一、选择排序

1.1 什么是选择排序?

选择排序是一种简单直观的排序算法。它的基本思想是从未排序的数据中选择最小(或最大)的元素,放到已排序数据的末尾,同时将该元素从未排序部分删除,直到所有元素都排序完成。

具体操作为,首先找到未排序部分的最小元素,并与未排序部分的第一个元素交换位置,这样就完成了一次选择。然后,将接下来未排序部分的第一个元素视为最小,找到最小元素并与未排序部分的第一个元素交换位置,以此类推,直到所有元素都排序完成。

选择排序的时间复杂度为O(n^2),是一种不稳定的排序算法。虽然它的效率相对较低,但由于其简单易实现,可以用于排序小规模的数据集合。然而对于大规模数据集合,选择排序通常不是一个最佳的选择。

1.2 思路

1.2.1 思路一

  1. 遍历第一趟数组,找出数组的最小值,与第一个数据交换
  2. 遍历第二趟数组,继续找出最小值,与第二个数据交换
  3. 重复上述动作

1.2.2 优化思路

  1. 一趟遍历找到最大和最小的元素,分别把他们放到数组的两端
  2. 缩小区间最大最小值包含的区间,找到次大,次小的元素
  3. 以此类推,直到头尾下标重合

该思路可能存在的问题:当maxi的位置与begin重合,则begin先与mini的位置交换,此时max位置的最大值被交换走,导致end与max交换的数值是错误的(图解见下)

1.3 C语言源码

1.3.1 思路一

//交换两个数据void Swap(int* a, int* b){    int temp = *a;    *a = *b;    *b = temp;}//选择排序void SelectSort(int* arr, int n){int i = 0;    for (i = 0; i  

1.3.2 优化思路

//交换两个元素void Swap(int* p1, int* p2){int tmp = *p1;*p1 = *p2;*p2 = tmp;}//插入排序void SelectSort(int* a, int n){int begin = 0;int end = n - 1;while (begin  

二、堆排序

请点击:堆排序详细理解-CSDN博客

上一篇:怎么在贴吧找服务器?

下一篇:电信云服务器怎么使用网络?