01. 目的
用java语言编写程序,实现从键盘获取数组元素并按从小到大排列元素大小。
注:此处主要介绍冒泡法排序
02.程序代码
package com.test; //创建了text包
import java.util.*; //导入java.util包下的所有类库
public class Sort { //声明定义了公共类---Sort
//从键盘输入10个数字存入数组,并将其按从小到大排列
public static void main(String[] args)
{
int n=10; //定义一个整型变量n
int array[]=new int[n]; //创建一个长度为n的定长数组
Scanner arr=new Scanner(System.in);//用Scanner类获取控制台的输入
System.out .println("请输入10个数字(用空格隔开):");//显示台输出提示--请输入10个数字(用空格隔开):
//用for循环逐一获取控制台输入的十个数字赋值给数组array
for(int i=0;i<array.length;i++) //定义变量当i=0,当i<数组长度时,执行循环语句,否则跳出;每执行一次i=1+1
{
array[i]=arr.nextInt();//接受控制台输入的数字给数组array赋值
}
System.out.println();//显示台输出一个空白行用于作间隔
System.out.print("排序前数组: ");//显示台输出提示--排列前数组:
//用for循环逐一提取显示数组array的元素
for(int i=0;i<array.length;i++)//定义变量当i=0,当i<数组长度时,执行循环语句,否则跳出;每执行一次i=1+1
{
System.out.print(array[i]+" ");//显示台输出数组array的元素,中间用"空格"隔开
}
//对数组用冒泡法进行从小到大的排序
int temp; //定义一个整型临时变量temp
//用两层循环比较两个相邻的元素,将值大的元素交换至右端,一直循环比较n-1趟,直至顺序排列完毕
for(int i=0;i<array.length;i++) //外层循环控制排序趟数
{
for(int j=i+1;j<array.length;j++) //内层循环控制排序趟数
{
//若数组元素i大于数组元素j(即第i个数大于第i+1个数),执行判断语句,调换两数位置,即将较小数往左移
if(array[i]>array[j])
{
//若第i个数大于第i+1个数,则交换位置
temp=array[i]; //将第i+1个数放到temp中,array[i] —>temp
array[i]=array[j]; //第j个数的值等于第j+1个数的值; array[j]—>array[i]
array[j]=temp; //第i+1个数的值=原始存在temp的 值;temp—>array[j]
}
}
}
System.out.println(); //显示台输出一个空白行用于作间隔
System.out.print("\n排序后数组: "); //显示台输出提示--排列后数组:
//逐一输出顺序排列好的数组值i
for(int i=0;i<array.length;i++)
{
System.out.print(array[i]+" ");//显示台输出数组array的元素,中间用"空格"隔开
}
}
}
04. 运行结果
05. 举例说明冒泡排序原理
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,
这样一趟过去后,最大或最小的数字被交换到了最后一位,
然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子。
以下例子有助于理解两个for循环语句:
for(int i=0;i<array.length;i++) //外层循环控制排序趟数
{
for(int j=i+1;j<array.length;j++) //内层循环控制排序趟数
Example:对原始数组{6,2,4,1,5,9}从小到大排序
第一趟排序(外循环)
① 第一次两两比较6 > 2交换 (内循环)
交换前状态{6,2,4,1,5,9}
交换后状态{2 ,6 , 4 , 1 , 5 , 9 }
② 第二次两两比较,6 > 4交换
交换前状态{2 ,6 , 4 , 1 , 5 , 9 }
交换后状态{2 ,4 , 6 , 1 , 5 , 9 }
③ 第三次两两比较,6 > 1交换
交换前状态{2 , 4 , 6 , 1 , 5 , 9 }
交换后状态{ 2 , 4 , 1 , 6 ,5, 9}
④ 第四次两两比较,6 > 5交换
交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
⑤ 第五次两两比较,6 < 9不交换
交换前状态{ 2 , 4 , 1 , 6 ,5, 9}
交换后状态{ 2 , 4 , 1 , 5, 6 , 9 }
第二趟排序(外循环)
① 第一次两两比较2 < 4不交换
交换前状态{ 2 , 4 , 1 , 5, 6 , 9 }
交换后状态{ 2, 4 , 1 , 5 , 6, 9 }
② 第二次两两比较,4 > 1交换
交换前状态{ 2, 4 , 1 , 5 , 6, 9 }
交换后状态{ 2 , 1 , 4 , 5 , 6 , 9 }
③ 第三次两两比较,4 < 5不交换
交换前状态{2 , 1 , 4 , 5 , 6 , 9 }
交换后状态{ 2 , 1 , 4 , 5 , 6 , 9 }
④ 第四次两两比较,5 < 6不交换
交换前状态{ 2 , 1 , 4 , 5 , 6 , 9 }
交换后状态{ 2 , 1, 4 , 5 , 6 , 9 }
第三趟排序(外循环)
① 第一次两两比较2 > 1交换
交换前状态{ 2 , 1, 4 , 5 , 6 , 9 }
交换后状态{ 1 , 2, 4 , 5 , 6 , 9 }
② 第二次两两比较,2 < 4不交换
交换后状态{ 1 , 2, 4 , 5 , 6 , 9 }
交换后状态{ 1 , 2, 4 , 5 , 6 , 9 }
③第三次两两比较,4 < 5不交换
交换后状态{ 1 , 2, 4 , 5 , 6 , 9 }
交换后状态{ 1 , 2, 4 , 5 , 6 , 9 }
第四趟排序(外循环)无交换
第五趟排序(外循环)无交换
排序完毕,输出最终结果1 2 4 5 6 9