Java算法
几个简单的算法示例
前言
冒泡排序是一种对数组中的数据进行排序的一种方法。每一次对数组的遍历都是将较大的数交换到后面,这样每次遍历都会讲最大的值交换到最后一位。每次遍历后,排序数组的规模都会减少一个数据元素。一、原理分析
例如,对数组{1,9,7,5,3}进行冒泡排序,其过程如下:
第一趟排序时,共有5个数参与排序,比较次数为4次。
比较完成后,实现了将数组中最大的值:9交换到数组的最后一位。
1和9进行比较,9较大,无需交换位置。数组为:1,9,7,5,3
9和7进行比较,9较大,需要交换位置。数组为:1,7,9,5,3
9和5进行比较,9较大,需要交换位置。数组为:1,7,5,9,3
9和3进行比较,9较大,需要交换位置。数组为:1,7,5,3,9
第二趟排序时,共有4个数(1,7,5,3)进行比较(9已在第一趟排序时交换到了最后,无需再进行排序),比较次数为3次。
比较完成后,实现了将数组中第二大的值:7交换到数组的倒数第二位。
1和7进行比较,7较大,无需交换位置。数组为:1,7,5,3,9
7和5进行比较,7较大,需要交换位置。数组为:1,5,7,3,9
7和3进行比较,7较大,需要交换位置。数组为:1,5,3,7,9
第三趟排序时,共有3个数(1,5,3)进行比较(7,9已在第二趟排序时交换到了最后,无需再进行排序),比较次数为2次。
比较完成后,实现了将数组中第三大的值:5交换到数组的倒数第三位。
1和5进行比较,5较大,无需交换位置。数组为:1,5,3,7,9
5和3进行比较,5较大,需要交换位置。数组为:1,3,5,7,9
第四趟排序时,共有2个数(1,3)进行比较(5,7,9已在第三趟排序时交换到了最后,无需再进行排序),比较次数为1次。
比较完成后,实现了将数组中第四大的值:3交换到数组的倒数第四位。
1和3进行比较,3较大,无需交换位置。数组为:1,3,5,7,9
四趟排序完成后,就实现了有5个元素组成的数组的排序。
二、实现代码
代码如下:
public static void bubble(int[] array) {
int temp = 0;
// 第一层循环控制比较的趟数
for(int i = 0;i<array.length-1;i++) {
// 第二层循环控制的是比较的数的范围
for(int j = 0;j<array.length-1-i;j++) {
if(array[j]>array[j+i]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
// 打印排序完成后的数组
for(int i:array) {
System.out.print(i);
}
}
三、总结
1、数组中有n个元素,则比较的趟数为n-1
2、每一趟中比较的次数为:第几趟+在该趟中比较的回数=数组中数的个数。也可以理解为:该趟中比较的回数 = 数组中数的个数-第几趟。
3、每一趟比较,都会比较出一个最大值,将最大值交换到最后。
4、每一回比较,都是两个数进行比较。比较完成可能会交换位置,也可能不会交换位置。