作者:阿程
vx同qq:1764930806
冒泡排序(bubbleSort)
单向冒泡
冒泡排序算法的基本思想
将第一个元素和第二个元素进行比较,若为逆序则将两个元素交换,然后比较第二个元素和第三个元素。依次类推,直至第 n-1个元素和第 n个元素进行比较为止。上述过程称为第一趟冒泡排序,其结果使最大值元素被放置在最后一个位置(第 n个位置)。然后进行第二趟冒泡排序,对前 n-1个元素进行同样操作,其结果是使第二大元素被放置在倒数第二个位置上(第 n-1个位置)。
冒泡排序图解
代码实现
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
/*输入一串数组*/
System.out.println("输入数字并用,隔开");
String str = sc.nextLine().toString();
String[] arr = str.split(",");
int[] b = new int[arr.length];
for(int i = 0;i < b.length;i++){
b[i] = Integer.parseInt(arr[i]);
}
/*结束输入*/
bubbleSort(b); //引用冒泡排序对数组进行排序
System.out.println(Arrays.toString(b)); //输出数组
}
/*冒泡排序 内外部均已优化 已达单向最优*/
public static int[] bubbleSort(int[] arr){
if(arr == null | arr.length <2){
//判断数组个数小于两个则直接返回
return arr;
}
/*定义数组元素最后发生交换的位置*/
int lastExchangeIndex = 0;
int sortBorder = arr.length-1;
/*也可不定义使用如下方式替代
for(int j = 0;j < arr.length-1-i;j++)*/
for(int i =0;i < arr.length-1;i++) {
boolean isSorted = true;//如果一趟中发生了数组交换代表无序则定义一个boolean变量使其判断是否有序 无交换则有序可以break循环了
for(int j = 0;j < sortBorder;j++)
{
if(arr[j