Java基础---从键盘获取数组元素并进行排序

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

猜你喜欢

转载自blog.csdn.net/yangdan1025/article/details/82625729
今日推荐