.
context:
1.图片show by pictures
2.源码source code
有图有真相:
第一轮:
第二轮:
第三轮:
源码部分:
package sortAlgorithem;
import java.util.Arrays;
import java.util.Random;
/**
*
* @author ocaicai@yeah.net @date: 2011-5-1 值得注意的都在详细的注释里面了
*/
public class SelectSortTest {
public static void main(String[] args) {
// 定义一个数组
int[] emptyArray = new int[10];
// 初始化数组
int[] targetArray = initArray(emptyArray);
// 打印最后的数组
System.out
.println("排序后的数组:" + Arrays.toString(selectSort(targetArray)));
}
private static int[] selectSort(int[] array) {
// totalTurns总共比较的次数比数组的长度少1,比如:数组长度为2时只需比较1次
int totalTurns = array.length - 1;
// countedTurns:已经比较了的轮数
for (int countedTurns = 0; countedTurns < totalTurns; countedTurns++) {
// 临时的索引用来记录每一轮比较结果的目的(最大或者最小)索引,每一轮都从第一个位置0开始
int tempIndex = 0;
// 每一次临时的都从目标的第一个开始比较
for (int targetIndex = 0; targetIndex < array.length - countedTurns; targetIndex++) {
// 如果目标索引处的值比临时索引处的值大,那么将此索引赋值给临时索引
if (array[targetIndex] > array[tempIndex]) {
tempIndex = targetIndex;
}
}
// 一轮比较完后才进行临时索引(实际上是最大或者最小值的索引了)和最高处交换值
swapTwoIndexValue(array, tempIndex, array.length - 1 - countedTurns);
}
return array;
}
/**
* function:交换两索引处的值
*
* @param array
* @param oneIndex
* @param anotherIndex
*/
private static void swapTwoIndexValue(int[] array, int oneIndex,
int anotherIndex) {
int tempValue = array[oneIndex];
array[oneIndex] = array[anotherIndex];
array[anotherIndex] = tempValue;
}
// 初始化数组:使用随机数为数组赋值
private static int[] initArray(int[] array) {
Random random = new Random();
for (int i = 0; i < array.length; i++) {
array[i] = random.nextInt(100) - random.nextInt(100);
}
System.out.println("原数组:" + Arrays.toString(array));
return array;
}
}
输出结果:
原数组:[52, -58, 8, -49, 45, -53, 9, 56, -1, -17]
排序后的数组:[-58, -53, -49, -17, -1, 8, 9, 45, 52, 56]
原数组:[-61, -22, -1, 9, 24, -14, -8, -24, 77, 60]
排序后的数组:[-61, -24, -22, -14, -8, -1, 9, 24, 60, 77]
分享到:
相关推荐
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
在本文中,我们将深入探讨四种经典的排序算法:插入排序、选择排序、基数排序和冒泡排序,以及它们在C++语言中的实现。 **插入排序(Insertion Sort)** 插入排序是一种简单直观的排序算法,它的工作原理类似于我们...
选择排序是一种简单的排序算法,它的基本思想是在未排序的序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)的元素,然后放到已排序序列的末尾。...
本文将深入探讨一种经典的排序算法——选择排序,并通过给定的C语言代码示例来详细解析其工作原理和实现过程。 ### 选择排序的基本概念 选择排序是一种简单直观的比较排序算法。其基本思想是在未排序序列中找到...
本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...
以下是关于"冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序"这七种常见排序算法的源码实现及相关知识点的详细解释: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
### 选择排序详解 #### 一、选择排序简介 选择排序是一种简单直观的比较排序算法。它的基本思想是:在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小...
本主题涵盖了六种经典的排序算法:希尔排序、堆排序、快速排序、简单选择排序、插入排序和冒泡排序。这些算法各有特点,适用于不同的场景,下面将逐一详细介绍。 1. **希尔排序**:希尔排序是由Donald Shell提出的...
简单选择排序是一种基础且直观的排序算法,虽然效率较低,但对理解排序原理非常有帮助。当我们需要在单链表这种非数组结构上进行排序时,需要对基本的简单选择排序算法进行一些调整。接下来,我们将详细探讨如何在...
在本文中,我们将深入探讨四种常见的内部排序方法:插入排序、快速排序、选择排序以及再次提到的选择排序。这四种排序方法在不同的场景下各有优劣,理解它们的工作原理和性能特性对于优化算法至关重要。 **1. 插入...
冒泡排序和选择排序是两种基础的排序算法,它们在计算机科学中有着广泛的应用,尤其在教学和理解排序原理时非常关键。这两种算法虽然简单,但在特定情况下可以通过优化提高效率。 首先,我们来详细探讨冒泡排序。...
线性选择排序是一种基础的排序算法,其主要思想是通过遍历待排序的序列,找到当前未排序部分的最小(或最大)元素,将其与序列的第一个元素交换位置,然后对剩下的元素重复此过程,直到整个序列有序。这个过程可以...
冒泡排序和选择排序是两种基础的排序算法,在计算机科学中有着广泛的应用,尤其是在学习编程语言如C语言时,理解并能实现这两种排序算法是非常重要的。下面将详细讲解这两种排序方法以及它们在C语言中的实现。 **...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
本项目聚焦于选择排序法,这是一种简单直观的排序算法,适用于小规模数据集或教学目的。 选择排序的工作原理如下: 1. **基本概念**:选择排序是一种不稳定的排序方法,它通过重复地找出待排序序列中的最小(或...
本文将深入探讨C#中常见的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序,以及它们的实现细节和应用场合。 首先,我们来看**冒泡排序**。冒泡排序是一种简单的交换排序方法,它通过不断比较相邻元素并交换...
选择排序是一种简单直观的排序算法,它的工作原理可以分为以下几个步骤: 1. **理解选择排序**:选择排序从数组的第一个元素开始,遍历数组寻找当前未排序部分的最小(或最大)元素。找到后,将这个最小(或最大)...
本项目涵盖了五种经典的排序算法:快速排序、堆排序、归并排序、插入排序和选择排序。接下来,我们将深入探讨这些算法的原理、实现及性能特点。 1. **快速排序**: 快速排序由C.A.R. Hoare在1960年提出,是一种采用...