复习:冒泡排序法

来源:互联网 发布:java转换json字符串 编辑:程序博客网 时间:2024/05/08 16:24

学C++一年都开始学Java了,才发现学过的好多C++知识都给忘了。今天必须复习冒泡排序法。

例题:编写程序,用冒泡法(又称)气泡法对十个数升序排序。


先看一下忘记冒泡法排序的程序是怎么写的:

import java.util.Scanner;//import java.text.DecimalFormat;public class paixu {public static void main(String[] args) {Scanner input = new Scanner(System.in);int i,t;int num[]=new int[10];for(i=0;i<10;i++)num[i]=input.nextInt();input.close();for(i=0;i<9;i++){if(num[i]>num[i+1]){t=num[i];num[i]=num[i+1];num[i+1]=t;}}for(i=0;i<9;i++){System.out.print(num[i]+" ");}System.out.print(num[9]);}}
这样写的输出结果是:

可以看到,最大的数9经过一轮比较,已经“沉”到底部。

通过这个错误程序可以理解冒泡排序的思想。(唉,真是存在即真理啊,犯错并不是什么坏事。)

在此基础上,再添加一个外部循环,用变量 j ( 从 j=1 开始 )控制。第二轮(j=2)循环还剩中间8个数,即从第一个元素8(元素下标 i=1)开始,跟余下的7 6 5 4 3 2 1 0 进行8次比较,即(n-j)次比较。

以此类推,每一次循环要进行(n-j)次比较,实现对所有数的升序排序时,共循环了n-1次。

所以正确的代码是:


import java.util.Scanner;//import java.text.DecimalFormat;public class Main{public static void main(String[] args) {Scanner input = new Scanner(System.in);int i, j, t;int num[] = new int[10];for (i = 0; i < 10; i++)num[i] = input.nextInt();input.close();for (j = 1; j < 10; j++) {//循环9次for (i = 0; i < 10 - j; i++) {//每一次循环比较10-j次if (num[i] > num[i + 1]) {t = num[i];num[i] = num[i + 1];num[i + 1] = t;}}}for (i = 0; i < 9; i++) {System.out.print(num[i] + " ");}System.out.print(num[9]);}}
Ps:写 j、i 的时候一定要注意别写错了



0 0