排序算法之冒泡排序【小二大讲堂】

介绍之间先分享一个排序算法网站(可以自定义排序):https://visualgo.net/zh/sorting?slide=1,不过先得看完本排篇。。。你才能掌握!!!

冒泡排序

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

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
时间复杂度:若文件的初始状态是正序的,一趟扫描即可完成排序,所需的关键字比较次数C和记录移动次数M均达到最小值Cmin=n-1;Mmin=0;所以冒泡排序最好的时间复杂度是O(n)。如果文件是反序的那么需要n-1趟排序,每趟排序都需要进行n-1关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:Cmax=n(n-1)/2;Mmax=n(n-1)/4;冒泡排序的最坏时间复杂度是O(n^2)。
冒泡排序图示
在这里插入图片描述
上述:
1.给你一个数组int[] arr={10,8,5,7,3,1}
2.首先将第一个数10和第二个数8进行比较,较小的数是8,则进行交换位置,
3.交换位置后为{8,10,5,7,3}如图第二列所示,然后将第二个数与第三个数进行比较,较小的数为5,则10和5进行交换位置。
4.交换后如图第三列所示,再次进行交换,将较小的数进行交换,直至一轮完毕,如图第六列
5.按照上述排序规则再次进行排序一趟。总共排序数组长度-1趟即可排序完成。

代码示例

···
import java.util.Arrays;

/**
 * 
 * @author 数据小二g:
 * 
 * @version 创建时间:2018年3月24日 下午9:02:21
 * 
 *          类说明 --实现冒泡排序
 * 
 */
public class BubbleSort {

	public static void main(String[] args) {
		// 给定一组数据
		int[] arr = { 12, 32, 435, 56, 12, 345 };
		System.out.println("排序前:" + Arrays.toString(arr));
		// 调用排序方法
		bubbleSort(arr);
		System.out.println("排序后:" + Arrays.toString(arr));
	}

	/**
	 * 冒泡排序方法
	 * @param arr数组
	 */
	private static void bubbleSort(int[] arr) {
		for (int i = 0; i < arr.length - 1; i++) {// -------外层循环控制排序的趟数
			for (int j = 0; j < arr.length - 1 - i; j++) {// ------内层循环控制每一趟排序多少次
				if (arr[j] > arr[j + 1]) { // ---如果第一个数比第二个大,则交换位置
					int temp = arr[j + 1];
					arr[j + 1] = arr[j];
					arr[j] = temp;
				}
			}
		}
	}
}

若看其他排序请关注小编,工作闲暇之时,陆续更新讲解!!!

IT技术刊:一个按钮?天猫精灵春季新品发布会邀请函抵达IT之家c

猜你喜欢

转载自blog.csdn.net/Mirror_w/article/details/89286497