版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
原理分析
现存在一个无序数组{1,9,7,5,3},请利用冒泡排序将数组按照从小到大(从大到小)排序。
第一趟:一共五个数,比较了4回,流程如下:
1和9比,9大,不变换位置,所以还是 1,9,7,5,3
9和7比,9大,需要变换位置,9和7对调 1,7,9,5,3
9和5比,9大,需要变换位置,9和5对调 1,7,5,9,3
9和3比,9大,需要变换位置,9和3对调 1,7,5,3,9
第二趟: 1,7,5,3,9 比较了3回,流程如下:
1和7比,7大,不需要变换位置, 所以还是 1,7,5,3,9
7和5比,7大,需要变换位置 ,所以变成 1,5,7,3,9
7和3比,7大,需要变换位置 ,所以变成 1,5,3,7,9
第三趟:1,5,3,7,9 比较了2回,流程如下:
1和5比 ,5大,不需要变换位置, 所以还是 1,5,3,7,9
5和3比, 5大 ,需要变换位置 , 变成 1,3,5,7,9
第四趟:1,3,5,7,9 比较了1回,流程如下:
1和3比 , 3 大 ,不需要变换位置, 所以还是1,3,5,7,9
小结:
- 1、 数组中5个数,比较了5-1=4趟
- 2、每一趟比较了几次呢?第几趟+在该趟中比较的回数=数组中元素的个数
- 3、每一趟比较,比较出一个最大值,放到最后面
- 4 、每一回的比较中两个数两两进行比较,可能需要对调位置
代码实现
冒泡排序的代码实现如下:
package com.algorithm;
/**
* 本文作者:谷哥的小弟
* 博客地址:http://blog.csdn.net/lfdfhl
*/
public class BubbleSort {
public static void main(String[] args) {
int[] intArray = {
11, 99, 77, 5, 0, -1};
printArray(intArray);
System.out.println();
bubble(intArray);
}
public static void bubble(int[] intArray) {
for (int i = 0; i < intArray.length - 1; i++) {
for (int j = 0; j < intArray.length - 1 - i; j++) {
if (intArray[j] > intArray[j + 1]) {
swap(intArray, j, j + 1);
}
}
}
printArray(intArray);
}
//打印数组
public static void printArray(int[] intArray) {
for (int i = 0; i < intArray.length; i++) {
System.out.print(intArray[i] + " ");
}
}
//交换数组中的元素
public static void swap(int[] intArray, int i, int j) {
int temp = 0;
temp = intArray[i];
intArray[i] = intArray[j];
intArray[j] = temp;
}
}