这篇文章讲述的是算法初级部分的冒泡排序问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
对N个整数进行升序排列
算法分析
冒泡排序是经典的一个问题,过程如下:
假设对四个整数进行冒泡排序5,2,6,1
下面对第一趟排序进行详细分析:
2与5比较,2<5,不交换
5与6比较,5<6,不交换
6与1比较,6>1,交换
第一趟结果:2,5,1,6
以此类推…
第一趟:2,5,1,6
第二趟:2,1,5,6
第三趟:1,2,5,6
完成排序
代码实现
public class Q8_BubbleSort {
/**
* 问题描述:对N个整数进行升序排列
*
* 算法分析:冒泡排序是经典的一个问题,过程如下:
* 假设对四个整数进行冒泡排序5,2,6,1
* 下面对第一趟排序进行详细分析:
* 2与5比较,2<5,不交换
* 5与6比较,5<6,不交换
* 6与1比较,6>1,交换
* 第一趟结果:2,5,1,6
* 以此类推
* 第一趟:2,5,1,6
* 第二趟:2,1,5,6
* 第三趟:1,2,5,6
* 完成排序
*
* 由此可见冒泡排序是通过两两比较如果前者比后者大,则交换
* (a,b交换这样写:c=a,a=b,b=c)每一趟都将最大的数放到最终
* 位置,进行N-1趟比较
*/
public static void main(String[] args) {
List<Integer>arr = new ArrayList<>() ; //用于存放输入list的值
System.out.println("请输入排序的个数:");
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt() ;
System.out.println("请输入"+N+"个要排序的数:");
while(N>0){
arr.add(scanner.nextInt()) ;
N-- ;
}
scanner.close();
for(int i=0 ; i<arr.size() ; i++) //一共执行N-1趟
for(int j=0 ; j<arr.size() ; j++){
if(arr.get(i) < arr.get(j)){ //若前者小于后者则交换
int c = arr.get(i) ;
arr.set(i, arr.get(j)) ;
arr.set(j, c) ;
}
}
System.out.println(arr);
}
}
样例输出
- 输入
7
5 3 9 6 8 2 7
- 输出
[2, 3, 5, 6, 7, 8, 9]