介绍之间先分享一个排序算法网站(可以自定义排序):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;
}
}
}
}
}
若看其他排序请关注小编,工作闲暇之时,陆续更新讲解!!!