步骤:
从表的开始位置进行比较,每次迭代
1.找出最小元素的位置
2.将这个最小元素移到未排序表的起始位置
比较次数O(n2),交换次数O(n)
如图所示:
public class SelectionSort {
public void selectionSort(int[] arr, int last) {
int i, minIndex;
for (i = 0; i < last; i++) {
minIndex = minLocation(arr, i, last);// 找到最小元素的索引
swap(arr, i, minIndex);// 交换
}
}
private int minLocation(int[] arr, int first, int last) {
int minIndex = first;
for (int i = first + 1; i <= last; i++) {
if (arr[i] < arr[minIndex])
minIndex = i;
}
return minIndex;
}
private void swap(int[] arr, int loc, int minIndex) {
int temp;
temp = arr[loc];
arr[loc] = arr[minIndex];
arr[minIndex] = temp;
}
public static void main(String[] args) {
int arr[] = { 2, 568, 34, 46, 9, 23, 89, 43, 572, 684, 783, 543 };
SelectionSort ss = new SelectionSort();
ss.selectionSort(arr, arr.length - 1);
for (int i = 0; i < 12; i++) {
System.out.print(arr[i] + ",");
}
}
}
- 大小: 93.1 KB
分享到:
相关推荐
通过以上详细的介绍和分析,我们可以看到冒泡排序和选择排序都是基于比较的简单排序算法。虽然这两种算法在实际应用中效率不高,但由于其实现简单且易于理解,常被用作学习排序算法的基础。在处理小规模数据时,这两...
此外,Java提供了多种数组操作,如System.arraycopy()用于复制数组部分,Arrays.sort()进行排序,以及Arrays.equals()比较两个数组是否相等。 栈和堆是Java内存管理中的两个关键区域。栈主要用于存储局部变量、方法...
快速排序是一种 Divide and Conquer 排序算法,通过选择一个ivot 将数组分成两个部分,然后递归地对这两个部分进行排序。 图解: 首先取出下标为 0 的数,然后依次与下标为 1,2…比较,如果 arr[0]>arr[x]时,我们...
- 将待排序数组按照增量`g[i]`分成若干个子序列,每个子序列包含`g[i]`个元素。 - 对每个子序列进行插入排序。插入排序的基本操作是将一个记录插入到已经排序好的有序表中,从而得到一个新的、记录数增1的有序表。...
2. Java常用算法和数据结构:冒泡排序、选择排序、插入排序、链表、树等。 3. Java网络编程基础知识:TCP/IP协议、Socket编程、HTTP协议等。 4. Java Web开发基础知识:Servlet、JSP、JavaBean、MVC模式等。 本书...
通过图解的方式,我们可以更直观地理解每种算法的运作过程,加深记忆,并根据实际需求选择合适的排序方法。在实际编程中,如Java、Python等语言都提供了内置的排序函数,但在特定场景下,手动实现排序算法可能会带来...
稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、...
Java中有多种排序算法,例如选择排序、冒泡排序、快速排序等。这里我们只介绍选择排序。 选择排序的思路是:首先,遍历数组中的每一个元素,然后选择最小或最大的元素,并将其放置在数组的开头或结尾。 代码: ``...
选择排序是一种简单的排序算法,思路是选择数组中的最小元素,和第一个元素交换,然后在剩下的元素中选择最小元素,和第二个元素交换,以此类推,直到排序完成。时间复杂度为 O(n^2),空间复杂度为 O(1)。Java 代码...
这个"Java基础技术栈图解大全-xmind源文件"应该包含以上各方面的详细图解,帮助初学者直观地理解每个知识点,并形成完整的Java技术体系概念。通过学习和实践这些内容,开发者将能够熟练地运用Java进行软件开发。
快速排序是高效的交换排序,基于分治策略,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以...
在Java中实现快速排序,通常采用递归的方式。首先,我们需要一个快速排序函数,接受一个整数数组和两个索引参数,表示需要排序的子数组范围。在这个例子中,函数`quickSort(int[] array, int start, int end)`用于...
- `TreeSet`: 基于红黑树实现的Set,可以自然排序或根据Comparator排序。 - `HashMap`: 基于哈希表实现的Map。 - `TreeMap`: 基于红黑树实现的Map,可以自然排序或根据Comparator排序。 **重要类库**: - `...
- **数组(Array)**:在Java中,数组是一种基本的数据结构,可以存储相同类型的多个元素。它通过索引访问元素,提供快速的随机访问。 - **链表(List)**:分为单向链表、双向链表等类型。链表中的每个元素都包含指向...
通常,PPT会包括冒泡排序的步骤图解,动画演示,以及如何优化冒泡排序(比如引入一个标志位来判断是否在一轮遍历中进行了交换,以提前结束排序等)。 冒泡排序的时间复杂度为O(n^2),不适合处理大规模数据,但在...
- **排序**: 包括冒泡排序、选择排序等常见排序算法。 - **查找**: 如二分查找法,适用于有序数组的查找。 #### 高级特性 - **类与对象**: - 类定义了对象的行为和属性。 - 对象是类的实例。 - 构造方法用于...
通过由基于JAVA的演示所组成的可视专题讨论来掌握数据结构和算法 学会如何为常见和不太常见的编程条件选择正确的算法 利用数据结构和算法为现实世界的处理过程建模 了解不同的数据结构的优势和弱点,考虑如何利用...
1. 选择基准值(pivot):选择数组中的一个元素作为基准值,不同的选择基准值的方法可能会影响排序的效率。 2. 分割数组(Partition):重新排列数组,所有比基准值小的元素摆放在基准前面,而比基准值大的元素摆在...
1. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序等,它们用于将一组数据按特定顺序排列。 2. **搜索算法**:如二分查找、广度优先搜索(BFS)、深度优先搜索(DFS),用于在数据结构中寻找目标...