0
点赞
收藏
分享

微信扫一扫

冒泡排序(介绍与代码)

半秋L 2022-02-25 阅读 50



基本思想

 基本思想

  • 从无序序列头部(尾部)开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾(队头),从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。


 本次的代码是从序列尾开始,把最小的数据依次的放到头部,直接放菜

package com.lingaolu;

/**
* @author 林高禄
* @create 2020-05-08-16:28
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 99, 4, 77, 83, 22, 45, 25, 47, 64, 1};
System.out.print("排序前数组:");
println(arr);
int arrNum = bubbleSort(arr);
System.out.print("排序后数组:");
println(arr);
System.out.println("冒泡排序的比较次数是:" + arrNum);
int[] arr2 = {1, 2, 3, 4, 5, 6, 7, 9, 8};
System.out.print("排序前数组:");
println(arr2);
int arr2Num = bubbleSort(arr2);
System.out.print("排序后数组:");
println(arr2);
System.out.println("冒泡排序的比较次数是:" + arr2Num);

}

// 冒泡排序
public static int bubbleSort(int[] arr) {
if (null == arr) {
return 0;
}
int num = 0;
int end = arr.length;
int exchange = 0;
//end作为每趟排序的终止条件
while (end > 0)
{
for (int i = 1; i < end; i++) {
num++;
if (arr[i - 1] > arr[i]) {
swap(arr, i - 1, i);
exchange = 1;
}
}
//数组本身为升序,如果一趟排序结束,并没有进行交换,那么直接跳出循环(减少循环次数,升高效率)
if (0 == exchange) {
break;
}
--end;
}
return num;
}

public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}

public static void println(int[] arr) {
if (null == arr) {
System.out.println("数组为空");
return;
}
int length = arr.length;
StringBuffer s = new StringBuffer();
s.append("[");
for (int i = 0; i < length; i++) {
if (i == 0) {
s.append(arr[i]);
} else {
s.append(",").append(arr[i]);
}

}
s.append("]");
System.out.println(s);
}

}


结果

排序前数组:[5,2,8,99,4,77,83,22,45,25,47,64,1]
排序后数组:[1,2,4,5,8,22,25,45,47,64,77,83,99]
冒泡排序的比较次数是:78
排序前数组:[1,2,3,4,5,6,7,9,8]
排序后数组:[1,2,3,4,5,6,7,8,9]
冒泡排序的比较次数是:36



同样的数组,与插入排序相比 ,可以看出插入排序大的效率比冒泡排序的高。 



举报

相关推荐

0 条评论