自己的理解:冒泡排序就是比较很多趟,每一趟都可以选出一个最大的数,再下一趟比较的时候,那个最大的数就不用比了。可以放在左边(降序),也可以放在右边(升序)不用管了。
书中的理解:冒泡排序的思想就是不断的交换,通过交换完成最终的排序
冒泡排序:假设一共有N个数,则总趟数为N-1,第i趟需要比较N-i次
下面放一段代码
package com.e_bubble;
/**
* 冒泡排序
* N个数,需要n-1趟,第i趟需要比较N-i次
* array.length-i-1 为什么要-1,是因为数组下标从0开始,不减1就会报错(数组下标越界)
* @author ylq
*
*/
public class BubbleDemoX {
public static void main(String[] args) {
int[] array = {100,-10,0,5,4,12,9};
printArray(array);
bubbleSort2(array);
System.out.println();
printArray(array);
}
/**
* 冒泡排序 升序
* @param array
*/
public static void bubbleSort(int[] array) {
for (int i = 0; i<array.length; i++) { //外层循环控制趟数,总趟数为arr.length
for (int j = 0; j<array.length-i-1 ; j++ ) { // -内训循环为当前第i趟,需要比较的次数
if (array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
/**
* 冒泡排序 降序
* @param array
*/
public static void bubbleSort2(int[] array) {
for (int i = 0; i<array.length; i++) {
for (int j = 0; j<array.length-i-1 ; j++ ) {
if (array[j] < array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.printf("%d\t",array[i]);
}
}
}
冒泡排序也是写在《大话数据结构》中第九章排序算法的第一个,算是最容易理解的排序算法
当中归纳总结了7种算法
简单排序算法有:冒泡、选择、直接插入
改进算法排序有:希尔、堆、归并、快速
在《数据结构与算法分析 Java语言描述》这本书中也是以“选择问题”作为起点。即:设有一组N个数而要确定其中第k个最大者。
我们按照第一个解决方法,只要懂冒泡排序,就可以写出下面的程序
public static int GetmaxValue(int[] array) {
for (int i = 0; i<array.length; i++) {
for (int j = 0; j<array.length-i-1 ; j++ ) {
if (array[j] < array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array[0];
}
今天的冒泡排序算法就先到这里啦!
努力努力再努力X 2020/5/12