冒泡排序
排序:将一组数据按照固定的规则进行排列
冒泡排序:一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面, 依次对所有的数据进行操作,直至所有数据按要求完成排序
冒泡排序逻辑: 1、如果有n个数据进行排序,总共需要比较n-1次 2、每一次比较完毕,下一次的比较就会少一个数据参与
冒泡排序的练习
xpackage ch12;
public class a_6_1冒泡排序代码实现 {
public static void main(String[] args) { //main方法
//定义一个数组
int[] arr = {1,4,2,8,6,9,3,0,15,12,14,20};
System.out.println("排序前: " + arrayToString(arr));
//第一次比较
for(int i=0; i<arr.length-1; i++) { //这里要减1,不然会索引越界
if(arr[i] > arr[i+1]){
//交换位置
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第一次比较后: " + arrayToString(arr)); //大的数据放在最后面
//第二次比较
for(int i=0; i<arr.length-1-1; i++) { //这里要再减1,不然会索引越界。即再减少1个数据的比较
if(arr[i] > arr[i+1]){
//交换位置
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第二次比较后: " + arrayToString(arr)); //大的数据放在最后面
//第三次比较
for(int i=0; i<arr.length-1-1-1; i++) { //这里要再减1,不然会索引越界。即再减少1个数据的比较
if(arr[i] > arr[i+1]){
//交换位置
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第三次比较后: " + arrayToString(arr)); //大的数据放在最后面
System.out.println("............");
//------------------------------------------------------------------------------------------------
//........次比较后,如下。即优化如下
for(int x=0; x<arr.length-1; x++){ //n个元素进行比较,只需要比较n减1次
for(int i=0; i<arr.length-1-x; i++) { //这里要再减1,不然会索引越界。即再减少1个数据的比较
if(arr[i] > arr[i+1]){
//交换位置
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
System.out.println("一步到位排序完成: " + arrayToString(arr)); //大的数据放在最后面
}
//------------------------------------------------------------------------------------------------------
//下面的方法是给上面'分步演示冒泡排序'和'一步到位演示冒泡排序'的
//arrayToString方法把数组中的元素按照指定的规则组成一个字符串: [元素1,元素2,...]
public static String arrayToString(int[] arr){
StringBuilder sbd = new StringBuilder();
sbd.append("[");
for (int i = 0; i < arr.length; i++){
if(i == arr.length - 1){
sbd.append(arr[i]);
} else{
sbd.append(arr[i]).append(",");
}
}
sbd.append("]");
String s = sbd.toString();
return s;
}
}
xxxxxxxxxx
package ch12;
import java.util.Arrays;
//该类在java.util下,所以在使用的时候需要进行导包。该类包含用于操作数组的各种方法,如排序和搜索。该类还包含一个静态工厂,可以将数组视为列表
//该类的成员方法被静态修饰了
//该类其实是工具类,有一个无参构造方法,可自行在下面选中Arrays,点击Ctrl+B,可查看源码
public class a_6_2Arrays {
//方法名 说明
//public static String toString(int[] a) 返回指定数组的内容的字符串表示形式
//public static void sort(int[] a) 按照数字顺序排序指定的数组
public static void main(String[] args) {
//定义一个数组
int[] arr = {27, 89, 30, 37, 23};
//返回指定数组的内容的字符串表示形式
System.out.println("排序前: " + Arrays.toString(arr));
//按照数字顺序排序指定的数组
Arrays.sort(arr);
System.out.println("排序后: " + Arrays.toString(arr));
//工具类的设计思想:
//1、构造方法用private修饰(即防止外界创建对象)
//2、成员用public static修饰(即强制要使用类名来访问工具类的成员方法,比如Arrays就是工具类,其他类只能使用类名访问Arrays的成员方法)
}
}