冒泡排序是一种基本的排序方法。通俗来说就是:从后往前一个一个进行对比,符合条件的前进,不符合的就放在最后一个被对比的位子上。
如:12,45,10,6,9,5,34这把个数用冒泡排序进行从小到达排列
首先用12 : 45, 45 >12 ;位置不变。12,45,10,6,9,5,34
45 : 10, 45 > 10,将45与10换位置 12,10,45,6,9,5,34
45 : 6, 45 > 6 ,将45与6换位置 12,10,6,45,9,5,34
45 : 9, 45 >9,将45与9换位置 12,10,6,9,45,5,34
45 : 5, 45 > 5,将45与5换位置 12,10,6,9,5,45,34
45 : 34, 45 > 34,将45与5换位置 12,10,6,9,5,34,45
排序过程:12,45,10,6,9,5,34
(1) 12 10 6 9 5 34 45 比较6次
(2) 10 6 9 5 12 34 45 比较5次
(3) 6 9 5 10 12 34 45 比较4次
(4) 6 5 9 10 12 34 45 比较3次
(5) 5 6 9 10 12 34 45 比较2次
(6) 5 6 9 10 12 34 45 比较1次
最终得出了5 6 9 10 34 45,一共比较了6次,比较6次是外层for循环的次数,用元素个数减1来表示。每次比较的数都是元素个数减1,再减去正确定的元素的下标。第一次为了对比下标为0的元素,所以是(元素个数)7 - 1 - i(从0开始,每次加1),这是for嵌套循环的内层循环。
计算机利用冒泡排序进行排列:
class MySort {
public static void main(String[] args) {
int[] arr = new int[10];//定义数组
boolean ret = getNumFromStdin(arr);//利用布尔值接收函数传的值
if (ret) {
bubbleSort(arr);
public static boolean bubbleSort(int [ ] arr){//打印结果
//参数合法性判断
if (arr == null || arr.length == 0){
System.out.println("输入参数不合法");
return false;
}
for (int i = 0; i < arr.length-1; i ++){//外层空值循环次数,7个数字,循环6次,所以是length - 1次
for (int j = 0; j < arr.length - i - 1; j ++){//内层循环控制内容,每次比较,第一个数需要和后面6个数进行比较,第二个与后面5个数比较,一次发现规律,比较时,元素的下标加1为元素个数,所以用元素个数 - 1表示循环比较的次数。,若理解不了,记住格式。
if (arr[j] > arr[j + 1]){//如果钱面的数字大于后面的数字,两数交换位置。
int temp = arr[i];
arr[j] = arr[ j + 1];
arr[j + 1] = temp;//这里是主函数区,交换两个元素的位置
}//if
}//for j
}//for i
return true;//返回
}
/**
功能:从键盘上获取十个int类型的数据放入数组
参数: int[] array 表示要传入的数组【首地址】
返回值: boolean 返回true 表示函数运行成功,返回false表示函数运行失败
1、传入的数组首地址是null
2、传入的数组长度为0
*/
public static boolean getNumFromStdin(int[] array) {
//参数合法性判断
if (array == null || array.length == 0) {
System.out.println("Input Param is invalid!");
return false; //表示函数运行失败
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入" + array.length + "个数:");
for (int i = 0; i < array.length; i++) {
array[i] = sc.nextInt();
}
return true;
}