`

java-冒泡排序-简单选择排序

 
阅读更多

 

 

1 冒泡

 

冒泡排序动画演示: http://www.cncfan.com/html/88/5380.html   

 

代码:

/**
 * 冒泡排序
 * @author zm
 * 大循环和小循环要结合一起看
 * 小循环负责 当前组下找两两数字比较,找到最大/小值,并将这个最大/小值放在最后
 * 大循环负责 将组内所有数据都安排到合理的位置( eg: 6个数字组成的数组,你需要执行 6-1次的组内小循环,才能将这6个数字按照从大/小的顺序安排到合理的位置)
 */
public class BubbleSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		int a[] = new int[4];
		a[0] = 8;
		a[1] = 3;
		a[2] = -1;
		a[3] = 0;
		
		bubbleSort(a);
		for(int i=0; i<a.length; i++){
			
			System.out.println(a[i]);
		}
	}
	/**
	 * 比如在i=0的第一次大循环下的小循环比较中,就会从  [8,3,-1,0]中找到最大数8,  比较结果为 [3,-1,0,8]
	 * 在        i=1的第二次大循环下,小循环就从[3,-1,0]里进行比较(int j=0; j<a.length-1-1; j++),剔除和数字8的比较,最后结果为 [-1,0,3,8]
	 */
	private static void bubbleSort(int[] a) {
		int temp;// 在单次大循环内,执行这个循环内 数组内部数据的交换操作
		// 大循环是要将数组所有数据排序按照规则排序完, 需要进行 size -1 次               
		for(int i=0; i<a.length-1; i++){ // 小循环是在 每一个大循环对应的数组内,将这个数组的最大/小 数找出,找出后这个最大/小值剔除,不作为下次大循环的比较对象   
			for(int j=0; j<a.length-1-i; j++){ // 这里的 i就表示在当次(i)大循环下,小循环中要剔除比较的数据个数
				if(a[j] > a[j+1]){
					temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
				}
			}
		}
	}

}

 

 

 

2 快速选择

 

 

/**
 * 简单选择排序(效率要比冒泡排序高)
 * 对n个记录进行扫描,选择最小的,进行输出
 * 对n-1访问记录进行扫描,选择最小的进行输出
 * .... 不断重复
 * 直到只剩下一个记录为止。
 * @author zm
 * 
 */
public class SelectSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		int a[] = new int[4];
		a[0] = 8;
		a[1] = 3;
		a[2] = -1;
		a[3] = 0;
		
		selectSort(a);
		for(int i=0; i<a.length; i++){
			System.out.println(a[i]);
		}
	}

	// 要点是: 1 最小值初始指向最左侧元素
	private static void selectSort(int[] a) {
		// i是第几次大循环的标志位  k 总是指向最小的哪一个  j则在大循环下不断的移动
		int k;
		int tmp;
		for(int i=0; i<a.length-1; i++){
			k = i; // 每次大循环下,k总是指向当前大循环下最开始的位置
			for(int j=i; j<a.length; j++){ // 遍历当前大循环下所有数组内的数据,如果数组内的数据有比 a[k]还小的,那么将k指向最小这个数
				if(a[j] < a[k]){
					k = j; 
				}
			}
			tmp = a[i]; // 每次大循环后,将数组最左侧的数值替换成最小值
			a[i] = a[k];
			a[k] = tmp;
		}
		
	}
	
}

 

 

 

3 两者简单比较:

 

3.1 冒泡排序交换次数多于选择排序,选择排序的内存循环中交换仅仅是在内层for结束后才交换,远远小于冒泡排序


3.2 冒泡排序是将最大/小值放在数组最右侧, 选择排序是将最大/最小数放在数组最左侧。

 

 

分享到:
评论

相关推荐

    Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结.md

    Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结 Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结 Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结

    java基础冒泡排序.ppt

    冒泡排序详解,简单而详细的讲清楚了,什么是冒泡排序。 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首...

    Java后端算法-冒泡排序和选择排序对比

    总的来说,冒泡排序和选择排序都是简单的排序算法,适合教学和理解排序的基本原理。在实际开发中,考虑到性能和效率,通常会优先选择更高效的排序算法。然而,了解这些基础排序算法有助于我们更好地理解和优化更复杂...

    排序算法 -- 冒泡排序

    尽管如此,冒泡排序在小规模数据或者部分有序的数据上表现良好,而且其简单易懂的实现方式使其在教学和理解排序算法的基本原理时非常有用。 标签中的“源码”指的是这段代码是一个实际的程序实现,而“工具”可能...

    详解Java常用排序算法-冒泡排序

    Java排序算法之冒泡排序详解 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换位置。这个过程持续对数列的末尾进行,直到整个数列都排序完成...

    用java实现冒泡排序法

    以下是一个简单的Java冒泡排序实现: ```java public class BubbleSort { public static void main(String[] args) { int[] array = new int[]{5, 2, 8, 3, 9, 1}; // 待排序的数组 int n = array.length; ...

    Java中数组实例---冒泡排序.pdf

    以下是一个完整的Java冒泡排序示例代码: ```java import java.util.Random; public class BubbleSort { public static void main(String[] args) { int[] arr = new int[10]; Random ran = new Random(); for...

    java中数组排序-冒泡排序

    冒泡排序

    java实现冒泡排序

    下面是一个简单的Java冒泡排序实现: ```java public class BubbleSort { public static void bubbleSort(int[] array) { int n = array.length; for (int i = 0; i &lt; n - 1; i++) { // 外层循环控制遍历次数 ...

    java冒泡排序代码

    java冒泡排序代码,亲测能用,控制台输入数据,自动排序

    java 冒泡排序 数组冒泡排序

    下面我们将深入探讨冒泡排序的工作原理、Java代码实现以及其效率分析。 ### 冒泡排序的工作原理 冒泡排序的基本思想是,重复地走访过要排序的元素列表,依次比较相邻的两个元素,如果它们的顺序(如从小到大)错误...

    java 冒泡排序法 PPT文档

    冒泡排序的工作原理可以简单概括为:通过比较相邻元素并交换位置,使得每一轮遍历后,最大(或最小)的元素被放置在正确的位置上。这个过程会重复进行,直到整个序列达到有序状态。以下是对冒泡排序算法的详细介绍:...

    java冒泡排序java冒泡排序集锦方法!

    冒泡排序是一种简单的排序算法,通过重复遍历要排序的列表,比较每对相邻的元素,并交换它们的位置(如果顺序错误的话),直到没有任何一对数字需要交换为止。 **示例代码分析**: ```java class Sort { String ...

    Java冒泡排序算法

    ### Java冒泡排序算法知识点详解 #### 一、冒泡排序基本概念 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是...

    [Java算法-排序]冒泡排序.java

    该资源提供了Java中实现冒泡排序的全面指南。文档中涵盖了冒泡排序的基本概念,包括如何对数组进行排序以及如何在Java中实现冒泡排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现冒泡排序,包括详细的...

    java基础。冒泡排序,求数组最大值

    里面有几个很好的javaSe基础题目,比如有javaSe的冒泡排序,求数组的最大值,求数组的最小只,求数组是否对称等等算法实例。

    【IT十八掌徐培成】Java基础第03天-04.求最值-冒泡排序.zip

    【Java基础】冒泡排序是计算机科学中一种基础且经典的排序算法,尤其在学习编程初期,它是理解排序机制的良好起点。本课程由IT十八掌徐培成老师讲解,旨在帮助学员掌握Java语言基础的同时,深入理解冒泡排序的原理与...

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...

    java 冒泡排序方法

    ### Java冒泡排序方法详解 #### 一、冒泡排序简介 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到...

    java版冒泡排序,插入排序,堆排序,快速排序,归并排序,希尔排序,桶排序

    例如,冒泡排序和插入排序简单但效率较低,适合小规模数据;堆排序和快速排序在中大规模数据上表现良好,但快速排序的不稳定性和堆排序的空间复杂度是需要注意的问题;归并排序和希尔排序在稳定性上有优势,而桶排序...

Global site tag (gtag.js) - Google Analytics