文章36 | 阅读 16982 | 点赞0
冒泡排序 :相邻的两个元素两两比较,元素值较大的元素依次向后置换.
冒泡排序的基本原理:
相邻元素两两比较,大的往后放。
第一次比较,比较完毕后,最大值就出现在了最大索引处。
第二次比较,比较完毕后,次最大值就出现在了次最大索引处
…
最终我们得到了一个排序好的数组
交换两个数
Q:如何交换两个数据呢?
int a = 10;
int b = 20;
A:采用临时变量
int temp = a;
a = b;
b = temp;
数组排序之冒泡排序原理图解
原始数组 arr
--------------------------
| 24 | 69 | 80 | 57 | 13 |
--------------------------
0 1 2 3 4
第一次比较:
找到最大的值
--------------------------
|【24】| 69 | 80 | 57 | 13 | 【不交换】
--------------------------
0 -> 1 2 3 4
--------------------------
| 24 |【69】| 80 | 57 | 13 | 【不交换】
--------------------------
0 1 -> 2 3 4
-------------------------- temp=arr[2];
| 24 | 69 |【80】| 57 | 13 | 【交换2和3】 arr[2]=arr[3];
-------------------------- arr[3]=temp;
0 1 2 -> 3 4
-------------------------- temp=arr[3];
| 24 | 69 | 57 |【80】| 13 | 【交换3和4】 arr[3]=arr[4];
-------------------------- arr[4]=temp;
0 1 2 3 -> 4
--------------------------
| 24 | 69 | 57 | 13 |【80】| 【第一次比较完毕】
--------------------------
0 -> 1 -> 2 -> 3 -> 4
第二次比较:
找到第二大的值
--------------------------
|【24】| 69 | 57 | 13 | 80 | 【不交换】
--------------------------
0 -> 1 2 3 4
--------------------------
| 24 |【69】| 57 | 13 | 80 | 【交换1和2】
--------------------------
0 1 -> 2 3 4
--------------------------
| 24 | 57 |【69】| 13 | 80 | 【交换2和3】
--------------------------
0 1 2 -> 3 4
--------------------------
| 24 | 57 | 13 |【69】|【80】| 【第二次比较完毕】 得到了最大值arr[4]和次最大值arr[3]
--------------------------
0 -> 1 -> 2 -> 3 -> 4
…
第四次比较
找到第4大的值
-------------------------------
|【13】|【24】|【57】|【69】|【80】| 【第四次比较完毕】
-------------------------------
0 -> 1 -> 2 -> 3 -> 4
规律:
规律一:
第一次比较完毕后,下一次的比较就会少一个元素参加;
第一次比较,5个元素,比较4次(arr.length - 1);
第二次比较,5个元素,比较3次(arr.length - 2);
…
第n次比较,5个元素,比较5-n次(arr.length - n);
规律二:
总共需要比较 arr.length - 1 次。
代码:
package Java_study;
/** * * @author 只是甲 * @date 2021-07-01 * @remark 冒泡排序 * */
public class array1 {
public static void main(String[] args) {
//初始数组(静态初始化)
int[] arr1 = {24, 69, 80, 57, 13};
for (int i = 1; i < arr1.length; i++) {
bubbleSortOnce(arr1, i);
printArr(arr1, i);
}
}
/** * @remark 按照格式打印数组 * @param arr 待排序的数组 * @param count */
public static void printArr(int[] arr, int count) {
System.out.print("\r\n第" + count + "次比较结果:[");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i] + ",");
}
//去掉最后一个逗号
System.out.print(new StringBuilder(sb.toString().substring(0, sb.length() - 1)).append("]"));
}
/** * @remark 冒泡排序一次 * @param arr * @param count 第n次比较,5个元素,比较5-n次(arr.length - n); */
public static void bubbleSortOnce(int[] arr, int count) {
for (int i = 0; i < arr.length - count; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i + 1] = temp;
}
}
}
}
测试记录:
第1次比较结果:[24,69,57,13,80]
第2次比较结果:[24,57,13,69,80]
第3次比较结果:[24,13,57,69,80]
第4次比较结果:[13,24,57,69,80]
Arrays :提供了对数组操作的各种方法。
public static String toString(int[] a):把数组转成字符串
public static void sort(int[] a):对数组进行升序排序
Arrays类中构造方法的问题:
private Arrays() {}
工具类的设计思想(Arrays、Math、Collections):
代码:
package Java_study;
import java.util.Arrays;
/** * * @author 只是甲 * @date 2021-07-01 * @remark Arrays类的概述和使用 * */
public class array2 {
public static void main(String[] args) {
//定义一个数组
int[] arr = {24, 69, 80, 57, 13};
//public static String toString(int[] a):把数组转成字符串
System.out.println("排序前:" + Arrays.toString(arr));
//public static void sort(int[] a):对数组进行升序排序
Arrays.sort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
}
测试记录:
排序前:[24, 69, 80, 57, 13]
排序后:[13, 24, 57, 69, 80]
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/u010520724/article/details/119936099
内容来源于网络,如有侵权,请联系作者删除!