冒泡排序(最优)

来源:互联网 发布:淘宝鸿星尔克优惠券 编辑:程序博客网 时间:2024/06/05 02:00

冒泡排序

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

package www.wtt.Test;

 

public class TestArray {

public static void main(String[]args) {

//冒泡排序

int[]nums = randomArray(10);

printArray(nums);

System.out.println("=======================");

bubbleSortSec(nums);

printArray(nums);

GirlFriend[] girlFriends =new GirlFriend[100];

girlFriends[0] =new GirlFriend("如花");

girlFriends[1] =new GirlFriend("芙蓉");

girlFriends[2] =new GirlFriend("玉凤");

 

}

 

public static void bubbleSortSec(int[]nums) {

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

//第二个值确定时,所有的值已经确定

//定义一个变量记录交换的次数,如果次数为0,说明数组已经排序完成

int changeCount = 0;

//开始比较并交换

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

//最大值不需要再次比较

if (nums[j] > nums[j + 1]) {

//交换

int temp =nums[j];

nums[j] =nums[j + 1];

nums[j + 1] =temp;

//开始计数

changeCount++;

System.out.println(changeCount);

}

}

//开始判断本次有没有数字的交换

if (changeCount == 0) {

break;

}

System.out.print("第" +i + "次循环:");

printArray(nums);

}

}

 

/**

 * 打印数组

 * @param nums

 */

private static void printArray(int[]nums) {

for (int i = 0; i < nums.length;i++) {

System.out.print(nums[i] + "\t");

}

System.out.println();

}

 

private static int[] randomArray(int length) {

//声明一个数组

int[]nums = new int[length];

//开始动态初始化

for (int i = 0; i < nums.length;i++) {

nums[i] = (int) (Math.random() * 10000);

}

//返回数组

return nums;

}

 

}

 

class GirlFriend {

private Stringname;

 

public GirlFriend(Stringname) {

this.name =name;

}

}

运行结果:

3652 17611982 2281 1003 2889 96999100 7407 3748

=======================

1

2

3

4

5

6

7

8

第0次循环:1761 19822281 1003 2889 3652 91007407 3748 9699

1

2

3

第1次循环:1761 19821003 2281 2889 3652 74073748 9100 9699

1

2

第2次循环:1761 10031982 2281 2889 3652 37487407 9100 9699

1

第3次循环:1003 17611982 2281 2889 3652 37487407 9100 9699

1003 17611982 2281 2889 3652 37487407 9100 9699

冒泡排序第一次会将最大的值排在最后。

changeCount=0时,说明没有发生互换,一直是nums[i]<nums[i+1]。即排序已经完成。

0 0