冒泡排序,选择排序

≡放荡痞女 提交于 2020-02-11 12:15:11

什么叫排序

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。

排序的本质是什么?
元素的比较+元素的换位

怎么实现

我们拿数组作为一个容器,来存储那些无序的元素。
利用Java语言的循环for,逻辑if,和数组这三个基础知识来进行排序算法的实现。

冒泡排序

思路:

从前往后 两个两个元素进行比较,如果当前元素比之后的那个元素大,需要做两个元素位置的交换。
以从小到大(升序)排序为例,如果想让无序数组中的元素变得有序,冒泡排序先是遍历数组中每一个元素,从第一个元素开始,如果第一个元素比它后一个元素大,这两个元素就交换位置,否则不交换。如此遍历到数组的倒数第二个元素,倒数第二个元素与倒数第一个元素做比较,第一次遍历结束。第一次遍历会得到数组中数字最大的那个元素,第二次遍历会得到次大的元素,以此类推,经过数组的长度-1次的轮询,即可排序完毕。
在这里插入图片描述

代码实现

//冒泡排序
	public static void bubbleSort(int [] array){
		for(int i = 0;i<array.length-1;i++){
			for(int j = 0;j<array.length-1-i;j++){
				if(array[j] > array[j+1]){
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
	}

选择排序

思路

在后面一堆的无序元素中找到(挨个找 循环)一个最小值(选择的过程),将最小值直接放在指定的位置(交换)。
选择排序与冒泡排序看起来很像,但是两者却有着本质区别。
选择排序刚开始将第一个元素暂定为最小值,标记这个最小值的索引,然后从第二个元素开始,依次遍历数组中每一个元素,如果这个元素比最小值还要小,就把这个元素确定为最小值,刷新minIndex索引值。经过一次遍历,我们得到的是真正的最小值的索引值。再利用外层for,将得到的最小值依次排列,最终得到一个有序的数组。
在这里插入图片描述

代码实现

	//选择排序
	public static void selectionSort(int [] array){
		for(int i = 0;i<array.length;i++){
			//每一次里面需要从当前位置i之后找   找到最小值
			int minIndex = i;//用来记录最小值的索引位置
			for(int j = i+1;j<array.length;j++){
				if(array[j] <array[minIndex])
				minIndex = j;
			}
			//将最小值与当前i所在的位置的值互换
			int temp = array[minIndex];
			array[minIndex] = array[i];
			array[i] = temp;
		}
	}

区别

冒泡排序的外层循环,循环array.length-1次,每次循环都会确定一个最大值并将它放在后面。它的内层循环旨在进行两两元素的比较,通过“沉底”方式,获得最大值并将其放在后面。
选择排序的外层循环,循环array.length次,每次循环获得一个最小值并将它放在前面。但是,它的内层循环旨在通过遍历到的元素与暂定的最小值比较,获得最小值的索引。接着再回到外层循环,把最小值进行有序的排列。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!