常见的两种数组排序:选择排序和冒泡排序

来源:互联网 发布:护卫神php套件怎么用 编辑:程序博客网 时间:2024/06/05 10:21

数组,作为一种存储数据的容器,容器中存储的元素必须为相同数据类型且按一定顺序排列。数组的初始化分为两种,一种为静态初始化,一种为动态初始化。静态初始化为在定义时,指定元素的值。动态初始化则是指定数组长度,系统会为数组中的元素指定初始值,这里要注意的是,不同的数据类型对应不同的初始值,例如如果存储的是整数类型(byte、short、int、long),则初始值为0,如果是boolean类型,则初始值为false,如果是引用类型(类、接口、数组),则初始值为null。

之前说过数组是按一定顺序排列的,所以在取值时,我们可以通过数组的下标变量堆数组中的元素进行访问,下标的最大值为数组的长度减1,最小下标为0。这种顺序只是取值的顺序,但并不是实际上的数组元素的顺序。因此,掌握对数组元素排序的方法很重要。下面就会介绍两种常见排序:选择排序和冒泡排序。

一.选择排序。选择排序的原理:假设数组长度为5,选择排序则会将下标为0的数组元素分别与下标为1到4 的元素的进行比较,确定出最小值,并交换位置;下一圈排序时再用下标为1的元素再与下标2到4的元素进行比较,再次确定一个最小值,并交换位置;只要循环比较下去,不断的交换位置,数组的排序就实现了。

public class ArrayTest2 {public static void main(String args[]){int arr[] =new int[]{3,1,5,9,11,8,2};//初始化数组    printArray(arr);//排序前selectSort(arr);//进行排序printArray(arr);//排序后打印你输出}public static void selectSort(int arr[]){for(int i=0;i<arr.length-1;i++)//外循环控制要每次参与比较的那个元素{//内循环控制参与比较元素的后面元素,后面的元素下标大于被比较元素for(int j=i+1;j<arr.length;j++){if(arr[i]>arr[j])//第一个元素分别和第二个,第三个,第四个...比较{int temp=arr[j];//定义中间变量arr[j]=arr[i];//j的下标值大于i,交换位置arr[i]=temp;}}}}public  static void printArray(int [] arr)//打印输出函数{System.out.print("[");for(int i=0;i<arr.length;i++){   if(i!=arr.length-1)System.out.print(+arr[i]+",");elseSystem.out.println(arr[i]+"]");}}}

二、冒泡排序。冒泡排序其实与选择排序在一些方面相似。冒泡排序的原理是通过相邻两个数组元素之间的比较大小,在交换位置,一直循环比较下去,每一圈比较会出现一个最大值。下一次的循环就不需要比较这个最大值了,只需要继续排序找到剩余元素的最大值即可。整个数组的排序就实现了。

public class ArrayTest3 {public static void main(String args[]){int arr[] =new int[]{3,1,5,9,11,15,8,2};printArray(arr);//排序前打印bubbleSort(arr);//进行排序printArray(arr);//排序后打印}public static void bubbleSort(int arr [])//冒泡排序{for(int i=1;i<arr.length;i++)//外循环控制比较次数{for(int j=0;j<arr.length-i;j++)/*-i,如果不减i,j<arr.length,当j=arr.length-1时,if(arr[j]>arr[j+1])j+1=arr.length,数组不存在下标为arr.length的元素,数组此时越界*/{if(arr[j]>arr[j+1])//相邻元素比较{int temp=arr[j];//中间变量arr[j]=arr[j+1];//交换位置arr[j+1]=temp;}}}}public  static void printArray(int [] arr)//打印输出函数{System.out.print("[");for(int i=0;i<arr.length;i++){   if(i!=arr.length-1)System.out.print(+arr[i]+",");elseSystem.out.println(arr[i]+"]");}}}

上述就是两种常见排序的举例,虽然Java API中的Arrays类中提供了数组排序的方法,在以后的开发中也会使用这种方法,但是掌握这两种排序会让我们更好的了解数组元素的排序原理,而且在面试中也常常会出现这些排序问题。因此,掌握常见的排序方法还是很有必要的。


0 0
原创粉丝点击