冒泡排序
排序:将一组数据按照固定的规则进行排列
冒泡排序:一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面, 依次对所有的数据进行操作,直至所有数据按要求完成排序
冒泡排序逻辑: 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; }
}xxxxxxxxxxpackage 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的成员方法)
}}