经典算法之直接选择排序

简介: 经典算法之直接选择排序

直接选择排序算法解析


一、理解直接选择排序思想


整个过程就是每一趟都将无序区中的所有元素进行逐一比较,找到最小的元素,与无序区中的首个元素进行交换,每次遍历会让有序区长度加1,无序区长度减1。重复以上步骤,直到所有的元素均已排好。该排序也称简单选择排序。


二、算法分析


1、算法流程


微信图片_20220920205615.gif


流程图释义:

黄色序列是最终效果,可以看出该序列是从小到大的顺序;

蓝色是无序区,意思就是蓝色会一直往后遍历,选出最小值并把最小值放到蓝色区的开头,随后该块蓝色变为黄色,有序区加一,无序区减一。


2、具体步骤


首先,将第一个元素固定,从剩下的元素中找到最小值下标并与固定位置的元素值互换


同上,只不过固定第二个元素,最后互换的也是第二个位置与最小值下标的值


直到该序列被遍历结束,排序才会结束


值得注意的是,如果该序列长度为n,那么遍历n-1次即可,否则数组会溢出


三、代码实现


选择排序算法代码:


//直接选择排序
void dirChoose(int* arr, int len)
{
  for (int i = 0; i < len - 1; i++) {
    int k = i;
    for (int j = i + 1; j < len; j++) {
      if (arr[j] < arr[k]) {
        k = j;
      }
    }
    if (k != i)//如果不等,说明存在无序区比固定位置的元素值小
    {
      int temp = arr[k];
      arr[k] = arr[i];
      arr[i] = temp;
    }
  }
}


辅助函数速览:


微信图片_20220920205829.png


主函数调用速览:


微信图片_20220920205847.png


四、时间复杂度分析


1、计算时间复杂度的一般步骤


这里要说一下分析时间复杂度的方法:


找程序中的基本语句

基本语句就是运行最多的那一行或者一段代码


分析基本语句的执行次数或者执行规律,写出时间复杂度

符合近似计算原则,常见的有O(1)、O(n nn)、O(l o g 2 n log2nlog2n) 和 O(n 2 n^{2}n

2 )


2、该算法时间复杂度


直接选择排序算法的外层循环和内层循环并没有执行次数上的联系,又因为外层会执行n-1次,而内层也会执行n-1次,所以该算法的时间复杂度就是O(n 2 n^{2}n

2

)

相关文章
|
2月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
25 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
2月前
|
搜索推荐 Java Go
深入了解选择排序算法
深入了解选择排序算法
31 4
|
2月前
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
2月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
36 0
|
4月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
6月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
6月前
|
搜索推荐
排序算法---选择排序-----详解&&代码
排序算法---选择排序-----详解&&代码
|
6月前
|
算法 搜索推荐
数据结构与算法-选择排序
数据结构与算法-选择排序
36 4
|
6月前
|
搜索推荐 算法
【C/排序算法】:堆排序和选择排序
【C/排序算法】:堆排序和选择排序
40 0
|
6月前
|
算法 搜索推荐 Java
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
45 0

热门文章

最新文章