首页 > 编程语言 >Java数组06:常见排序算法

Java数组06:常见排序算法

时间:2024-08-13 22:38:57浏览次数:9  
标签:sort arr Java int 元素 06 array 排序

1. 冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

冒泡排序算法的原理如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
class Bubble {
	public int[] sort(int[] array) {
		int temp = 0;
		// 外层循环,它决定一共走几趟 // -1为了防止溢出
		for (int i = 0; i < array.length - 1; i++) {
			int flag = 0; // 通过符号位可以减少无谓的比较,如果已经有序了,就退出循环
			// 内层循环,它决定每趟走一次
			for (int j = 0; j < array.length - i - 1; j++) {
				// 如果后一个大于前一个,则换位
				if (array[j + 1] > array[j]) {
					temp = array[j];
					array[j] = array[j + 1];
					array[j + 1] = temp;
					flag = 1;
				}
			}
			if (flag == 0) {
				break;
			}
		}
		return array;
	}

	public static void main(String[] args) {
		Bubble bubble = new Bubble();
		int[] array = {2, 5, 1, 6, 4, 9, 8, 5, 3, 1, 2, 0};
		int[] sort = bubble.sort(array);
		for (int num : sort) {
			System.out.print(num + "\t");
		}
	}
}

2. 选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法。

class SelectSort{
	public int[] sort(int arr[]) {
		int temp = 0;
		for (int i = 0; i < arr.length - 1; i++) { // 认为目前的数就是最小的, 记录最小数的下标
			int minIndex = i;
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[minIndex] > arr[j]) { // 修改最小值的下标
					minIndex = j;
				}
			} // 当退出for就找到这次的最小值,就需要交换位置了
			if (i != minIndex) { //交换当前值和找到的最小值的位置
				temp = arr[i];
				arr[i] = arr[minIndex];
				arr[minIndex] = temp;
			}
		}
		return arr;
	}
	public static void main(String[] args) {
		SelectSort selectSort = new SelectSort();
		int[] array = {2, 5, 1, 6, 4, 9, 8, 5, 3, 1, 2, 0};
		int[] sort = selectSort.sort(array);
		for (int num : sort) {
			System.out.print(num + "\t");
		}
	}
}

标签:sort,arr,Java,int,元素,06,array,排序
From: https://www.cnblogs.com/Konon/p/18357840

相关文章

  • Java数组07:稀疏数组
    1.线性结构线性结构是最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。线性结构有两种不同存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的,即在内存中是连续的,例如数组。链式存储的线性表称为链表,链表中的存储元......
  • Java数组05:Arrays 类
    数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。文档简介:此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。......
  • 一款Java 性能监控和统计工具——MyPerf4J!【送源码】
    背景随着所在公司的发展,应用服务的规模不断扩大,原有的垂直应用架构已无法满足产品的发展,几十个工程师在一个项目里并行开发不同的功能,开发效率不断降低。于是公司开始全面推进服务化进程,把团队内的大部分工程师主要精力全部都集中到服务化中。服务化可以让每个工程师仅在自己......
  • Java基础-学习笔记10
    **10内部类**内部类一个类的内部又完整的嵌套了另一个类的结构,被嵌套的类成为内部类,嵌套其他类的类称为外部类。是类的第五大成员(属性、方法、构造器、代码块、内部类)。内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系。classOuter//外部类{......
  • Java数组04:多维数组
    多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。多维数组的动态初始化(以二维数组为例)直接为每一维分配空间,格式如下:type[][]typeName=newtype[typeLength1][typeLength2];type可以为基本数据类型和复合数据类型,arraylen......
  • java
    markdown二级标题字体markdownmarkdownmarkdownmarkdown引用哈哈哈分割线图片![截图](C:\Users\黄刘洋\Pictures\Screenshots\屏幕截图2024-08-13161113.png)超链接点击跳转4399列表AA表格名字性别生日张三男1977.1.1代码publi......
  • Java数组03:数组使用
    数组的元素类型和数组的大小都是确定的,所以当处理数组元素时候,我们通常使用基本循环或者ForEach循环。【该实例完整地展示了如何创建、初始化和操纵数组】publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; /......
  • Java数组02:数组声明创建
    1.声明数组首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:dataType[]arrayRefVar;//首选的方法或dataTypearrayRefVar[];//效果相同,但不是首选方法建议使用dataType[]arrayRefVar的声明风格声明数组变量。dataTypearrayRefVar[]风格是来......
  • JDBC在java代码中的使用
    声明对于数据库的增删改查,在使用jdbc的过程中分二类,查(DQL)语句和增,删,改(DML语句)他们的整体都分为以下五部分,只是DQL语句多了数据的处理部分。在使用之前需要导入相关的jar包 1,加载驱动器(非必要,但是建议手动加载养成好习惯)2,创建连接3,创建会话4,执行会话5,关闭会话1,数据......
  • Java数组01:数组概述
    关于数组我们可以把它看作是一个类型的所有数据的一个集合,并用一个数组下标来区分或指定每一个数,例如一个足球队通常会有几十个人,但是我们来认识他们的时候首先会把他们看作是某某对的成员,然后再利用他们的号码来区分每一个队员,这时候,球队就是一个数组,而号码就是数组的下标,当我们......