您的位置:首页 > 其它

交换排序之 【冒泡排序】

2014-08-22 00:00 106 查看
摘要: 我也在考虑,怎样将冒泡排序讲的生动易懂些,TMD,语言能力不够!

class BubbleSorter {

public static void main(String[] args) {
int temp; //临时变量,用于数字交换

boolean flag = false; //是否发生交换,false没发生,true发生

int[] arrayInt = {21,345,32,567,90,99};//需排序的目标数组

for(int i = 0; i < arrayInt.length; i++) {
for (int j = 0; j < arrayInt.length - i - 1; j++) {

//这里 - i - 1是精髓,循环次数呈递减趋势

if (arrayInt[j] < arrayInt[j + 1]) {
temp = arrayInt[j];
arrayInt[j] = arrayInt[j + 1];
arrayInt[j + 1]  = temp;
flag = true;
//冒泡排序精髓在于两数比较,然后做交换。首尾相连是关键。

}
}
if(!flag) {
return;
}
}

System.out.print("ArrayList: ");
for (int ints : arrayInt) {
System.out.print(", " + ints);
}
}
}

看下执行过程:

排序前:21  345  32  567  90  99

第一次排序(外循环 I = 0 ):
{345  21}  32  567  90  99(内循环第一轮结果)
345  {32  21}  567  90  99(内循环第二轮结果)
345  32  {567  21}  90  99(内循环第三轮结果)
345  32  567  {90  21}  99(内循环第四轮结果)
345  32  567  90  {99  21}(内循环第五轮结果)

第二次排序(外循环 I = 1 ):
{345  32}  567  90  99  21(内循环第一轮结果)
345  {567  32}  90  99  21(内循环第二轮结果)
345  567  {90  32}  99  21(内循环第三轮结果)
345  567  90  {99  32}  21(内循环第四轮结果)

第三次排序(外循环 I = 2 ):
{567  345}  90  99  32  21(内循环第一轮结果)
567  {345  90}  99  32  21 (内循环第二轮结果)
567  345  {99  90}  32  21 (内循环第三轮结果)

(实际上到这一步时候,数组已经完成排序,后面的循环就不需要了。
故用标记flag标注,为false时候,表明数组已经有序,无需后面循环了。
直接结束循环。不过,还是看看后面执行过程
):

第四次排序(外循环 I = 3 ):
{567  345}  99  90  32  21 (内循环第一轮结果)
567  {345  99}  90  32  21 (内循环第二轮结果)

第五次排序(外循环 I = 4 ):
{567  345}99  90  32  21 (内循环第一轮结果)

第六次排序(外循环 I = 5 ): 内循环直接退出,结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序 冒泡 计算 存储