一、冒泡排序
这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
对数组
int[] arr = {65,23,1,4,99,6};
排序
-
算法过程模拟
-
原理:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
-
第一次排序结束后会得到一个最大值,在后续每次排序,比较的次数都会
-1
,最终得到一组由小到大排列的数组 -
第一次排序过程模拟
-
// 第一次排序 int[] arr = {65, 23, 1, 4, 99, 6}; int c ; // 定义第三方变量,方便交换数值 // 第一次排序 // 第一次交换 if (arr[0] > arr[1]) { // 如果数组中第一个数大于第二个数 则交换数值 c = arr[0]; arr[0] = arr[1]; arr[1] = c; } // 第二次交换 if (arr[1] > arr[2]) { // 如果数组中第二个数大于第三个数 则交换数值 c = arr[1]; arr[1] = arr[2]; arr[2] = c; } // 第三次交换 if (arr[2] > arr[3]) { // 如果数组中第三个数大于第四个数 则交换数值 c = arr[2]; arr[2] = arr[3]; arr[3] = c; } // 第四次交换 if (arr[3] > arr[4]) { // 如果数组中第四个数大于第五个数 则交换数值 c = arr[3]; arr[3] = arr[4]; arr[4] = c; } // 第五次交换 if (arr[4] > arr[5]) { // 如果数组中第五个数大于第六个数 则交换数值 c = arr[4]; arr[4] = arr[5]; arr[5] = c; } for (int a : arr){ // 循环输出arr System.out.println(a); }
-
第一次排序–简化后的代码
// 第一次排序 for (int i = 0 ; i < arr.length-1;i++){ if (arr[i]>arr[i+1]){ c = arr[i]; arr[i] = arr[i+1]; arr[i+1] = c; } } for (int a : arr){ // 循环输出arr System.out.println(a); }
-
第二次,第三次。。。。依此类推
-
-
冒泡排序完整代码
public class Main { public static void main(String[] args) { int[] arr = {65, 23, 1, 4, 99, 6}; int c ; // 定义第三方变量,方便交换数值 // 冒泡排序 // j:表示每次排序需要交换的次数(第一次排序需要交换length-1次,之后每次交换次数减1,直到没有在需要交换的数据) for (int j = 0;j < arr.length-1;j++){ for (int i = 0 ; i < arr.length-1-j;i++){ // i: if (arr[i]>arr[i+1]){ c = arr[i]; arr[i] = arr[i+1]; arr[i+1] = c; } } } for (int a : arr){ //循环输出arr数组 System.out.println(a); } } }