算法回顾系列第六篇:选择排序
-----------------------------------------
选择排序
基本原理:
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最前(或最后),直到全部待排序的数据元素排完。
程序实现:
public void sort(int[] data) {
//i代表已经排序的元素个数.
for(int i=0; i<data.length; i++){
//lowIndex代表最小元素的位置.
int lowIndex=i;
for(int j=data.length-1; j>i; j--){
//j从后向前将每个元素的值与最小元素进行比较,如果比最小元素还小,则设置该位置为最小元素
if (data[j] < data[lowIndex]){
lowIndex=j;
}
}
//交换最小元素位置
swap(data,i,lowIndex);
System.out.println(Arrays.toString(data));
}
}
public void swap(int[] data,int first,int second){
int temp;
temp=data[first];
data[first]=data[second];
data[second]=temp;
}
上面程序中:
遍历所有元素,并将已排序元素放在了最前。
每趟排序时,最小元素坐标默认为已排序元素的下一个元素(即待排序元素,初始为0)。
然后从后向前遍历每个元素并与最小元素进行比较,如果小于最小元素,则修改最小元素坐标位置。
每趟排序结束时,将最小元素与当前待排序元素交换位置,完成一趟排序。
重复以上步骤直到全部元素都排完序。
性能分析:
时间复杂度O(n^2)
空间复杂度:1。
稳定性:不稳定
分享到:
相关推荐
算法与程序设计知识点回顾 算法是计算机科学中的一种解决问题的方法,包括算法的基本概念、算法设计和分析、算法实现等方面。下面是算法与程序设计的知识点回顾: 第一章 算法概述 1. 算法的基本概念和性质: * ...
- 选择排序:每次选择最小(或最大)元素放入正确位置,如简单选择排序。 - 归并排序:分治法,将数据分成小块排序后再合并,时间复杂度为 O(n log n)。 - 基数排序:非比较排序,利用多关键字思想,如基数排序,...
根据给定的信息,本文将详细解释如何使用C语言实现二叉排序树的生成算法,并重点关注平衡二叉排序树的创建及遍历。 ### 一、二叉排序树基础概念 在深入了解具体的C语言代码实现之前,我们先来回顾一下二叉排序树...
1. **基础知识回顾**:在开始实验前,需回顾教科书中关于排序算法的基础理论知识。 2. **编程实现**: - 使用C语言编写程序,实现对一组随机生成的数据进行不同排序算法的处理。 - 实现的排序算法包括简单插入排序...
本资源包含了一个名为`SortSolution.py`的Python文件,里面实现了几种经典的排序算法,包括插入排序、选择排序、冒泡排序和快速排序。 1. **插入排序**: 插入排序是一种简单直观的排序算法,它的工作原理是通过...
数据结构与基础算法 ...问题梳理是指对算法和数据结构的总结和回顾。常见的问题梳理有: * 排序算法的优缺点 * 查找算法的优缺点 * 图结构的应用 * 树结构的应用 * 队列结构的应用 * 栈结构的应用
- **选择问题**:讨论了如何在未排序的序列中找到第k小的元素。 - **中值问题**:介绍了解决中值问题的方法。 ### 第四部分:高级的设计与分析技术 #### 第十五章:动态规划 - **基本原理**:介绍了动态规划的基本...
### C经典算法之快速排序法(二) #### 知识点概述 本篇文章将深入探讨快速排序算法的一个改进版本,并通过具体的代码实现来展现这一优化思路。在快速排序法(一)的基础上,本文重点关注轴的选择对算法性能的影响...
在IT行业中,排序算法是计算机科学的基础之一,尤其在编程领域,掌握各种排序算法对于提升程序性能至关重要。PHP作为一门广泛使用的服务器端脚本语言,虽然它的主要应用场景并不以性能著称,但在处理数据时,了解和...
回顾排序的基本概念,理解排序的目的和重要性。 查阅相关资料,了解常见的排序算法及其特点。 设定学习目标,明确要掌握的冒泡排序知识点。 二、冒泡排序的基本概念 重点内容: 定义冒泡排序,解释其名称的由来。 ...
排序算法是算法学习中最基础也是最重要的部分之一,在C语言中实现这些算法不仅可以加深对算法本身的理解,还能提升编程能力。 - **冒泡排序**:通过重复遍历要排序的列表,比较每对相邻元素并交换顺序来实现排序。 ...
1. **排序算法**:如快速排序、归并排序、堆排序、冒泡排序、插入排序等,它们是处理大量数据时的基础,用于按照特定顺序排列元素。 2. **搜索算法**:包括二分查找、广度优先搜索(BFS)和深度优先搜索(DFS),在数据...
1. **排序算法**:包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。这些是基础的算法,用于对数据进行有效排列,理解它们的工作原理有助于优化时间复杂度。 2. **查找算法**:如线性查找、二分查找。线性...
- **第2章:开始**:包括对排序、选择和优先队列等相关基础知识的回顾,以及习题解答。 - **第3章:函数的增长**:深入探讨时间复杂度的概念,以及如何分析算法的效率。 - **第4章:递归式**:介绍递归算法的设计...
冒泡排序是最简单的排序算法之一,通过重复遍历数组,比较相邻元素并根据需要交换它们的位置来完成排序。如果某次遍历没有发生任何交换,说明数组已经排序完成。 2. **选择排序(Selection Sort)** 选择排序的工作...
链式基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。在描述中提到的实验报告中,主要目标是实现一个链式基数排序算法,用于对一组数据进行最低位优先的排序...
- 各种排序算法如冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、基数排序和计数排序的时间复杂度。 - 排序算法的稳定性,例如快速排序是不稳定的,而归并排序是稳定的。 3. **字符串处理...
HDFS 回顾………·…… 382 11 .3.3 批量数据分析一-Hive 简介 ……··..................… 383 11.3.4 Flume、 HDFS 和 Hive 的 整合方案 …··.......... .....… 386 11.4 ...