//选择排序,注意内外循环之间有对应的关系
public static void selectionSort(int[] ary){
//先选中第一个数,然后从后面这一组元素中找到一个最小的,和前面的这个数交换
for(int i=0 ; i<ary.length-1 ; i++){//53814
for(int j=i+1 ;j<ary.length ; j++){
if( ary[j]<ary[i] ){//如果后面有比前面小的数,就交换
//交换 i <-> j
int temp = ary[i];
ary[i] = ary[j];
ary[j] = temp;
}
//System.out.print("i,j:" + i + "," +j);
//System.out.println(Arrays.toString(ary));
}
}
}
// 选择排序:通过n-1轮比较,每轮找到一个最小的放到前面。
// 12 3 45 25 46 75 15 12 52
// 6 3 8 4 2 5 9 1 排序的习惯是从小到大
//策略:先选中第一个数,然后从后面这一组元素中找到一个最小的,和前面的这个数交换
// 其次,i向后移一位,j从第三位(j+1)开始往后找,如果找到最小的数就和这个第二个数交换,以此类推,直到倒数第二个数结束。
// i从0到length-1,j从i+1开始到length
// if(ary[j]<ary[i])满足就交换
//
//每一轮结束后,对应的位置会出现最小的数
//冒泡排序
public static void bubbleSort(int[] ary){//只是内层循环中的数在比较,交换
for(int i=0; i<ary.length-1; i++){
for(int j=0 ;j<=ary.length-1-i ; j++){//53814
if(ary[j]>ary[j+1]){//比较内循环中的相邻两个数,如果前面的数比后面的数大,我们就交换一下
int temp=ary[j];//第一次i=0,j=0,ary[0]>ary[1],35814
ary[j]=ary[j+1];//第二次i=0,j=1,ary[1]<ary[2],35814
ary[j+1]=temp;//第三次i=0,j=2,ary[2]>ary[3],35184
//调试输出语句 //第四次 i=0,j=3,ary[3]>ary[4],35148 每一次循环一下,会将最大值放的对应的最大位置
}
}
}
}
// 冒泡排序:
// 策略:每次比较相邻的元素,如果前一个大交换,每轮比较会把最大的交换到最后,完成一个最大的排序。经过n-1轮比较排序完毕。冒泡就是比喻每次有一个大数飘到最后。
//轮号 i=0~<length-1 0-5=length-2-i 此时i=0
//j=0~length-2-i
//插入排序
public static void insertSort(int ary[]){//只是内层循环中的数在比较,交换
for(int i = 1; i<ary.length; i++){//注意此时i从1开始变化,第一个数默认不需要排序
int temp = ary[i];//将第一个数保持到temp变量中
int j;
for(j = i-1; j>=0; j--){ //j的变化范围是i-1,到0
if(temp<ary[j]){//第一次ary[j]就是ary[0]比较ary[0]和ary[1]的大小,如果ary[0]的值比ary[1]大的就将ary[0]的值赋值给ary[1]
ary[j+1] = ary[j];
}else{
break;
}
}
ary[j+1] = temp;//一轮比较完成后,才将保存在temp变量中的ary[i]值赋值给ary[j+1]位置,实现排序效果
//53814
//第一次 i=1,ary[1]=3 j=0,ary[0]=5,交换完就完成,因为j>=0
//第二次i=2,ary[2]=8 j=i-1=1,ary[1]=5,不用交换,j--,ary[0]=3,不交换,j-- 跳出循环体
//第三次i=3,ary[3]=6 j=i-1=2,ary[2]=8,待交换,接着j--,在比较,发现前面没有比6小的数,所有就将6和8交换,就结束了
//......
}
}
}
分享到:
相关推荐
### Java排序算法详解 在Java编程中,排序算法是数据结构与算法中不可或缺的一部分,它不仅能够帮助我们理解和处理数据,还能提升程序的性能。本文将深入探讨Java中常见的几种基本排序算法,包括插入排序、交换排序...
**插入排序与冒泡排序算法详解** 在计算机科学中,排序是数据处理的重要部分,它涉及到将一组数据按照特定顺序排列。插入排序和冒泡排序是两种基础且经典的排序算法,它们都属于简单排序方法,适合小规模或者部分...
### Java 实现数据结构常见排序算法及详解 #### 排序算法概述 排序算法是计算机科学中的基础概念之一,主要用于将一系列数据按照特定规则进行排列。根据数据处理方式的不同,排序算法大致分为两大类:比较排序与非...
除了插入排序和希尔排序,压缩包中还可能包含了其他几种常见的排序算法的Java实现,如冒泡排序、快速排序、选择排序、归并排序和堆排序等。每种排序算法都有其特定的适用场景和性能特点。例如,冒泡排序虽然简单,但...
### Java核心算法详解 #### 一、直接插入排序(Direct Insertion Sort) **基本思想**: 直接插入排序是一种简单的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到...
### 十大常用排序算法(Java实现) #### 冒泡排序 **定义与原理:** 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地...
【Java八大排序算法详解】 排序算法是计算机科学中基础且重要的算法之一,它们在处理大量数据时起到关键作用。在Java编程中,了解并掌握不同的排序算法有助于优化代码性能,提高程序效率。以下是对Java八大排序算法...
### Java版本排序算法详解 #### 插入排序 插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。在Java中,我们可以创建一个`...
### Java实现的常见排序算法详解 #### 一、冒泡排序 **定义及特点:** 冒泡排序是一种简单的排序算法,适用于数据量较小的情况。它的基本思想是通过不断地比较和交换相邻元素的位置来达到排序的目的。该算法的名字...
#### 三、各排序算法详解 1. **插入排序** 插入排序的基本思想是将一个记录插入到已经部分排序的序列中,从而得到一个新的、记录数加一的有序序列。主要包括直接插入排序和希尔排序两种。 - **直接插入排序**:...
本篇将深入探讨几种常见的Java排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序以及TimSort等。 1. **冒泡排序**: 冒泡排序是最基础的排序算法,通过不断交换相邻的逆序元素来逐步排序。...
这里我们将深入探讨七大经典排序算法:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序和基数排序,并结合Java语言的实现方式来进行详细解析。 1. 冒泡排序: 冒泡排序是最基础的排序算法之一,通过...
接着,文章依次展示了选择排序、冒泡排序、插入排序的实现过程,以及如何通过构建模块化的代码实现多种排序算法。最后,通过对快速排序和归并排序的深入探讨,进一步优化算法性能并分析不同排序算法的应用场景。 ...
【Java数组排序算法详解】 在Java编程中,排序是一项基础且重要的任务,尤其是在处理大量数据时。本文将深入探讨几种常见的数组排序算法,包括插入排序、交换排序、选择排序和归并排序,以及基数排序。这些算法在...
**基于Java语言十大经典排序算法** 排序算法是计算机科学中不可或缺的一部分,...通过阅读《基于java语言十大排序算法.docx》文档,你可以深入学习这些排序算法的实现细节,结合图形解释,有助于更好地理解和记忆。
Java 排序算法详解 Java 排序算法是指在 Java 编程语言中使用的各种排序算法,旨在对数据进行排序和组织。这些算法可以分为五大类:插入排序、交换排序、选择排序、归并排序和分配排序。 插入排序 插入排序是一种...
### Java常用八大排序算法详解 #### 一、直接插入排序 **基本思想:** 直接插入排序的基本思路是在要排序的一组数中,假设前面 (n-1) [n>=2] 个数已经排好顺序,现在要把第 n 个数插入到前面的有序数列中,使得这 ...
本文档主要介绍了Java中常见的五种排序算法:插入排序、交换排序(冒泡排序和快速排序)、选择排序(直接选择排序)、归并排序以及基数排序,并提供了Java代码实现。根据不同的数据规模和特性,我们可以选择合适的...
快速排序算法详解 快速排序(Quick Sort)是一种分治思想的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续...