java中数组的排序——选择排序的两种方式比较
NumSort.java
//数组排序 public class NumSort { public static void main(String[] args) { //拿到args数组的长度,为a数组的空间大小 int[] a = new int[args.length]; for (int i=0; i<args.length; i++) { //将args数组中的值转换为int a[i] = Integer.parseInt(args[i]); } System.out.println("排序前"); //打印数组a print(a); //选择排序数组a selectionSort(a); System.out.println("排序后"); //打印数组a print(a); } //打印数组a private static void print(int[] a) { for(int i=0; i<a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); } //选择排序数组a /* 分析算法: 排序前 2 4 1 3 8 7 6 5 9 0 _ i=0 1 4 2 3 8 7 6 5 9 0 0 4 2 3 8 7 6 5 9 1 _ i=1 0 2 4 3 8 7 6 5 9 1 0 1 4 3 8 7 6 5 9 2 _ i=2 0 1 3 4 8 7 6 5 9 2 0 1 2 4 8 7 6 5 9 3 _ i=3 0 1 2 3 8 7 6 5 9 4 _ i=4 0 1 2 3 7 8 6 5 9 4 0 1 2 3 4 8 6 5 9 7 _ i=5 0 1 2 3 4 7 6 5 9 8 0 1 2 3 4 6 7 5 9 8 0 1 2 3 4 5 7 6 9 8 _ i=6 0 1 2 3 4 5 6 7 9 8 _ i=7 0 1 2 3 4 5 6 7 9 8 _ i=8 0 1 2 3 4 5 6 7 8 9 _ i=9 0 1 2 3 4 5 6 7 8 9 */ private static void selectionSort(int[] a) { //拿出第一个数a[i]和后面的每一个数进行比较 for(int i=0; i<a.length; i++) { //下一个数a[j] for(int j=i+1; j<a.length; j++) { //从小到大进行排列,如果第一个数大于后面的数,则交换 if(a[j] < a[i]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } } //选择排序的算法优化,最小的值只交换一次,位置交换 /* 可读性和效率 分析算法: 0 1 2 3 4 5 6 7 8 9 - - - - - - - - - - 排序前 2 4 1 3 8 7 6 5 9 0 i=0,k = 0 2 9 0 4 1 3 8 7 6 5 9 2 i=1,k = 1 2 0 1 4 3 8 7 6 5 9 2 i=2,k = 2 3 9 0 1 2 3 8 7 6 5 9 4 i=3,k = 3 i=4,k = 4 5 6 7 9 0 1 2 3 4 7 6 5 9 8 i=5,k = 5 6 7 0 1 2 3 4 5 6 7 9 8 i=6,k = 6 i=7,k = 7 i=8,k = 8 9 0 1 2 3 4 5 6 7 8 9 */ private static void selectionSort2(int[] a) { int k, temp; for(int i=0; i<a.length; i++) { //k为最小的数的位置 k = i; for(int j=k+1; j<a.length; j++) { if(a[j] < a[k]) { //将数的位置调换 k = j; } } //如果k的位置不等于i的位置,交换 if(k != i) { temp = a[i]; a[i] = a[k]; a[k] = temp; } } } }
F:\java>javac NumSort.java F:\java>java NumSort 2 4 1 3 8 7 6 5 9 0 排序前 2 4 1 3 8 7 6 5 9 0 排序后 0 1 2 3 4 5 6 7 8 9 F:\java>
相关推荐
以上就是Java中常用的几种数组排序算法及其实现。每种排序算法都有其特定的适用场景和性能特点,理解并掌握这些排序算法有助于我们在实际编程中选择合适的排序方法,提高程序的效率。在实际应用中,还可以考虑使用...
在IT行业中,数组排序是一个基础且重要的概念,广泛应用于数据处理和算法实现。本文将深入探讨两种常见的排序算法——选择排序和冒泡排序,并结合给定的文件信息进行解析。 首先,选择排序是一种简单直观的排序算法...
本文将深入探讨两种基本的排序算法:选择排序和冒泡排序,并通过实际代码实现和时间复杂度分析进行比较。 选择排序是一种简单直观的排序算法。它的基本思想是,在未排序的序列中找到最小(或最大)的元素,存放到...
本文将深入探讨一个简单的数组排序技术——冒泡排序法,通过实例来阐述其工作原理和Java中的实现方式。 冒泡排序是一种基础的排序算法,其基本思想是通过重复遍历待排序的数列,依次比较相邻元素并根据需要交换它们...
本文档主要介绍了Java编程中的一种基础排序算法——冒泡排序,并结合实际示例详细阐述了如何在Java环境中实现冒泡排序算法。冒泡排序是一种简单直观的排序算法,它的核心思想是通过重复遍历待排序的序列,比较相邻...
3. **守护线程和用户线程**:Java区分两种类型的线程——用户线程(非守护线程)和守护线程。守护线程不阻止程序退出,而用户线程则会。 4. **线程同步**:为了防止多线程环境中的数据竞争,Java提供了`...
堆排序是一种基于比较的排序算法,它利用了数据结构——二叉堆(最大堆或最小堆)的特性。二叉堆是一棵完全二叉树,满足堆的性质:父节点的值总是大于或等于(对于最大堆)其子节点的值。在最大堆中,根节点是堆中...
在插入排序部分,代码会遍历每个子序列,比较相邻两个元素的大小,如果前一个元素大于后一个元素,则交换它们的位置,这样可以保证每个子序列都是有序的。当`gap`减到1时,整个数组完成了希尔排序。 希尔排序的时间...
Java代码中,我们可以使用两层循环,外层控制遍历次数,内层负责比较并交换。冒泡排序的时间复杂度同样为O(n^2)。 再来说说选择排序(Selection Sort)。选择排序的工作方式是,每次从未排序的部分找到最小(或最大...
本章节将重点探讨一种简单直观的排序方法——选择排序(Selection Sort)。选择排序算法在Java等编程语言中有着广泛的应用,尤其适用于理解基本排序算法的工作原理。 选择排序是一种不稳定的排序算法,它的基本思想...
这个题目要求在保持数组排序的前提下,删除所有重复的元素。解题的关键在于理解如何有效地遍历数组并移除重复项。文中提供了两种解决方案: - 第一种方法是使用双指针,一个`record`记录当前非重复元素,一个`num`...
本文将深入探讨两种特定的排序算法——选择排序和堆排序,并重点解析堆排序如何利用最小堆来实现排序过程。这两种算法在Java编程语言中都有广泛应用。 首先,我们来看选择排序。它是一种简单直观的排序算法,其基本...
在Java中,快速排序的核心是选择一个“基准”元素,然后将数组分为两部分,一部分的所有元素都小于基准,另一部分的元素都大于基准。接着对这两部分递归地进行快速排序。 5. **归并排序**:归并排序也是采用分治...
以下是根据标题和描述中提到的四种排序算法——冒泡排序、快速排序、插入排序和选择排序的详细说明。 **冒泡排序(BuddleSort)**: 冒泡排序是一种简单的交换排序,它通过重复遍历待排序的列表,比较相邻元素并...
冒泡排序可以有两种方向:向下冒泡(将较大的元素逐步向数组尾部移动)和向上冒泡(将较小的元素逐步向数组头部移动)。在Java中,冒泡排序可以通过以下方式实现: ```java public class BubbleSorter...
冒泡排序是一种基础且经典的排序算法,其工作原理是通过重复遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成...
### Java直接排序——选择排序详解 #### 一、引言 在计算机科学中,排序算法是一种非常基础且重要的算法,广泛应用于数据处理、数据分析等领域。本文将深入探讨一种基于Java编程语言的选择排序算法,并通过一个...
以上就是关于Java中三种排序算法——插入排序、希尔排序和选择排序的详细介绍。这些排序算法各有特点,插入排序适用于小规模数据或部分有序的数据,希尔排序则在处理大规模数据时效率更高,而选择排序虽然简单但效率...
2. 合并排序:在merge()方法中,我们将两个排好序的子数组合并成一个大的有序数组。 时间复杂度 归并排序算法的时间复杂度为O(n log n),其中n是数组的长度。这是因为在递归排序过程中,每个子数组的长度都减半,...