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

数组,作为一种存储数据的容器,容器中存储的元素必须为相同数据类型且按一定顺序排列。数组的初始化分为两种,一种为静态初始化,一种为动态初始化。静态初始化为在定义时,指定元素的值。动态初始化则是指定数组长度,系统会为数组中的元素指定初始值,这里要注意的是,不同的数据类型对应不同的初始值,例如如果存储的是整数类型(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]+",");
			else
				System.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]+",");
			else	
				System.out.println(arr[i]+"]");
		}
	}
}

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值