<span style="font-size:18px;">package com.xaut.zyq;
import java.util.Arrays;
//冒泡排序的具体思想和编程
/*
* 冒泡排序一种交换排序,<span style="color:#ff6666;">它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为为止。</span>
*/
public class BubbleSort {
public static void main(String[] args) {
int a[] = { 9, 1, 5, 8, 3, 7, 4, 6, 2 };
BubbleSort bs = new BubbleSort();
System.out.println("冒泡排序后的数组:"
+ Arrays.toString(bs.BubbleSortTest(a)).toString());
}
private int[] BubbleSortTest(int b[]) {
int i, j;
boolean flag = true;//flag用来做标记,若flag为true则退出循环
for (i = 0; i < b.length && flag; i++) {// 遍历一遍最初的数组
flag = false;
for (j = b.length - 2; j >= i; j--) {// j是从后往前循环
if (b[j] > b[j + 1]) {// 判断如果前者大于后者
swap(b, j, j + 1);//交换b[j]和b[j+1]的值
flag = true;
}
}
}
return b;
}
private void swap(int c[], int m, int n) {
int temp = c[m];
c[m] = c[n];
c[n] = temp;
}
/* i=0的时候将1冒到最顶端
* [9, 1, 5, 8, 3, 7, 4, 6, 2]
* [9, 1, 5, 8, 3, 7, 4, 2, 6]
* [9, 1, 5, 8, 3, 7, 2, 4, 6]
* [9, 1, 5, 8, 3, 2, 7, 4, 6]
* [9, 1, 5, 8, 2, 3, 7, 4, 6]
* [9, 1, 5, 2, 8, 3, 7, 4, 6]
* [9, 1, 2, 5, 8, 3, 7, 4, 6]
* [1, 9, 2, 5, 8, 3, 7, 4, 6]
* i=1的时候将2冒泡到第二位置
* [1, 9, 2, 5, 8, 3, 7, 4, 6]
* [1, 9, 2, 5, 8, 3, 4, 7, 6]
* [1, 9, 2, 5, 3, 8, 4, 7, 6]
* [1, 9, 2, 3, 5, 8, 4, 7, 6]
* [1, 2, 9, 3, 5, 8, 4, 7, 6]
* i=2的时候将3冒泡到第三位置
* [1, 2, 9, 3, 5, 8, 4, 6, 7]
* [1, 2, 9, 3, 5, 4, 8, 6, 7]
* [1, 2, 9, 3, 4, 5, 8, 6, 7]
* [1, 2, 3, 9, 4, 5, 8, 6, 7]
* i=3的时候将4冒泡到第四位置
* [1, 2, 3, 9, 4, 5, 6, 8, 7]
* [1, 2, 3, 4, 9, 5, 6, 8, 7]
* i=4的时候将5冒泡到第五位置
* [1, 2, 3, 4, 9, 5, 6, 7, 8]
* [1, 2, 3, 4, 5, 9, 6, 7, 8]
* i=5的时候将6冒泡到第六位置
* [1, 2, 3, 4, 5, 6, 9, 7, 8]
* i=6的时候将7冒泡到第七位置
* [1, 2, 3, 4, 5, 6, 7, 9, 8]
* i=7的时候将8冒泡到第八位置
* [1, 2, 3, 4, 5, 6, 7, 8, 9]
* 从下往上一直冒泡,遍历一遍然后里面从下面往上遍历,相邻的两个比较,然后将比较小的冒上去
* 冒泡排序的复杂度:
* 分析一下它的时间复杂度。当最好的情况,也就是要排序的表本身就是有序的,那么我们比较次数,根据最后改进的代码,
* 可以推断出就是n-1次的比较,没有数据交换,时间复杂度为o(n).当最坏的情况,即待排序表是逆序的情况,此时需要比较
*<span style="color:#ff6600;"> n(n-1)/2次,并作等数量级的记录移动。因此,总的时间复杂度为o(n平方)</span>
*/
}</span>
数据结构之排序(一)冒泡排序
最新推荐文章于 2021-03-30 11:31:25 发布