冒泡排序介绍
基本思想就是相邻数据交换,每次将最大或最小的数进行移动。
步骤:(1)对数组中的各数据,依次比较相邻的两个元素的大小。
(2)如果前面的数据大于(小于)后面的数据,就交换这两个数据。经过第一轮的多次比较排序后,便可以将最小 (大)的数据排好。
(3)再用同样的方法把剩下的数据逐个进行比较,最后便可按照小到大的顺序排好数组各数据。
下面是代码:每次将最大的数冒泡到后面,每排好一个数,里层for循环都-i,也就是不再查看已经排好的数据,优化代码时长。
package zhgyu.sort;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 冒泡排序
* @author zhgyu
*
*/
public class BubbleSort {
public static ArrayList<Integer> bubbleSort(ArrayList<Integer> list) {
// int num = 0;
for(int i = 0; i < list.size()-1; i++) {
//冒泡到后面的数不用再次遍历,节省时间
for(int j = 0; j <list.size() - 1 - i; j++) {
if(list.get(j) > list.get(j+1)) {
//替换
int temp = list.get(j);
//使用list集合的set方法,找到位置并将数字赋值到该位置
list.set(j, list.get(j+1));
list.set(j+1, temp);
}
}
}
return list;
}
public static void main(String[] args) {
//利用动态数组
ArrayList<Integer> list = new ArrayList<>();
Scanner s = new Scanner(System.in);
while(true) {
System.out.println("请输入数字(输入0结束输入):");
int num = s.nextInt();
if(num == 0) {
break;
}
list.add(num);
}
System.out.println("结束输入!");
//冒泡排序算法
list = bubbleSort(list);
//遍历排序后的数组
System.out.println("排序后的list:");
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
/* for(Integer i: list) {
System.out.println(i);
}*/
}
}