
数组中的三种排序方式对于这三种排序方法我们先要完成一些通用的代码public class MaoPao { //设置主函数定义数组规定其长度为5. public static void main(String[] args) { int[]arrnew int[5]; //将输入的内容存入到scan中. Scanner scannew Scanner(System.in); for(int i0;i5;i){ arr[i]scan.nextInt(); }接下来我将介绍三种排序方法冒泡排序、选择排序、插入排序冒泡排序冒泡排序是一种简单的排序算法它重复地遍历要排序的数列一次比较两个相邻元素如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换也就是说该数列已经排序完成。算法步骤比较相邻的元素。如果第一个比第二个大就交换它们两个。对每一对相邻元素作同样的工作从开始第一对到结尾的最后一对。这步做完后最后的元素会是最大的数。针对所有的元素重复以上的步骤除了最后一个。重复步骤1~3直到排序完成。示例// 冒泡排序实现//外层循环控制一共要进行多少轮冒泡。每一轮循环结束后最大的数字会“冒”在循环末尾。for(inti0;iarr.length-1;i){//内层循环控制相邻两个数字的相互比较与大小互换。for(intj0;jarr.length-1-i;j){//此处arr.length-1-j的原因后面i个元素已经是排好序的最大值不用重复比较以提高代码的运行效率。if(arr[j]arr[j1]){// 交换 arr[j] 和 arr[j1]此处可类比两个杯子里面不同饮料的互换引入一个空杯子temp。inttemparr[j];arr[j]arr[j1];arr[j1]temp;}}}// 遍历数组排序后输出System.out.println(冒泡排序结果);for(intnum:arr){System.out.print(num );}选择排序选择排序是一种简单直观的排序算法。它的工作原理是首先在未排序序列中找到最小或最大元素存放到排序序列的起始位置然后再从剩余未排序元素中继续寻找最小或最大元素然后放到已排序序列的末尾。以此类推直到所有元素均排序完毕。算法步骤初始状态整个数组为无序区[0...n-1]。第 i 趟排序 (i0,1,2,…,n-2) 开始时当前有序区和无序区分别为[0...i-1]和[i...n-1]。在无序区中找到最小元素记录其下标min。将最小元素与无序区的第一个元素即arr[i]交换此时[0...i]变为有序区。重复步骤 2~4直到无序区只剩下一个元素。示例//外层循环for(intj0;jarr.length-1;j){//假设当前位置j是最小值下标intminj;//内层循环for(intij1;iarr.length;i){//判断如果找到比arr[]更小的值if(arr[min]arr[i]){//就更新最小值的下标mini;}}//内层循环结束找到了本轮最小值下标min//交换arr[]和arr[min]inttemparr[j];arr[j]arr[min];arr[min]temp;}//遍历数组打印排序后的全部元素for(inti0;iarr.length;i){System.out.print(arr[i]);}}插入排序插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列对于未排序数据在已排序序列中从后向前扫描找到相应位置并插入。插入排序在实现上通常只需用到O(1)的额外空间的排序因而在从后向前扫描过程中需要反复把已排序元素逐步向后挪位为最新元素提供插入空间。算法步骤从第一个元素开始该元素可以认为已经被排序。取出下一个元素在已经排序的元素序列中从后向前扫描。如果该元素已排序大于新元素将该元素移到下一位置。重复步骤3直到找到已排序的元素小于或者等于新元素的位置。将新元素插入到该位置后。重复步骤2~5直到所有元素均排序完毕。示例// 外层循环从第二个元素开始依次将每个元素插入到前面已排序的序列中for(inti1;iarr.length;i){// 保存当前需要插入的元素值因为后续移动会覆盖arr[i]inttemparr[i];// j指向当前元素的前一个位置已排序部分的末尾intji-1;// 内层循环从后向前扫描已排序部分寻找temp的插入位置// 条件j0确保不越界且arr[j] temp表示当前扫描到的元素比temp大while(j0arr[j]temp){// 将比key大的元素向后移动一位为key腾出插入空间arr[j1]arr[j];// 继续向前扫描j--;}// 循环结束此时j指向第一个不大于temp的元素或者j-1temp应插入到最前面// 将temp插入到正确位置j1的位置arr[j1]temp;}// 排序后输出for(inti0;iarr.length;i){System.out.print(arr[i]);}输出结果