冒泡排序 直接排序 反转排序的Java实现

在程序设计中,经常需要将一组数据序列进行排序,这样更加方便统计和查询。程序中常见的排序方法有冒泡排序、选择排序和快速排序等。

1、冒泡排序

基本思想:对比相邻元素的值,如果满足条件就交换,把较小的元素移动到数组的前面,较大的元素值移动到数组的后面,也就是交换两个元素的位置,这样较小的元素就像气泡一样从底部上升到顶部。
在这里插入图片描述

图片来源:百度百科

public class BubbleSort {
	public static void main(String args[])
	{
		// 创建arry数组,并在其中赋值一些具体的数以待排序使用
		int array[] = {64,4,24,1,3,15};
		
		// 创建冒泡排序类的对象
		BubbleSort sorter = new BubbleSort();
		
		// 调用冒泡排序的方法进行排序
		sorter.sort(array);
	}

	// 排序方法
	public void sort(int array[])
	{
		for(int i = 1;i < array.length;i++)
		{
			for(int j = 0;j < array.length - i;j++)
			{
				if(array[j] > array[j+1])
				{
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
		
		showArray(array);
		
	}

	// 输出方法
	public void showArray(int[] array) 
	{
		for(int i:array)
		{
			System.out.print(i + " ");
		}		
	}
}

如果要实现倒排序,在代码块中只需要将 if(array[j] > array[j+1]) 的“>”改为“<”即可

2、直接排序

基本思想:将指定排序位置的值和数组其他位置的元素值进行对比,如果满足条件就交换元素值。注意这里与冒泡排序的区别,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换,如从最后一个元素开始排序。这样排序好的位置逐渐扩大,这样整个数组都成为已经排序好的格式。

public class SelectSort
{
	public static void main(String args[])
	{
		// 定义一个数组并赋值一些数据以待后续排序使用
		int array[] = {63,4,24,1,3,15};
		
		// 创造直接排序类的对象
		SelectSort sorter = new SelectSort();
		
		// 调用排序对象的方法将数组进行排序
		sorter.sort(array);
	}
	
	// 直接选择排序具体实现方法步骤
	public void sort(int array[])
	{
		int index;		// 用来存放索引值
		for(int i = 1;i < array.length;i++)
		{
			index = 0;
			for(int j = 1;j <= array.length - i;j++)	// 找到最大值的索引
			{
				if(array[j] > array[index])
				{
					index = j;  // 得到最大那个数的索引值
				}
			}
			
			// 交换
			int temp = array[array.length - i];  // 从后往前排,每轮均找到最后待排序的位置
			array[array.length - i]  = array[index];
			array[index] = temp;		
		}
		
		// 打印输出
		showArray(array);
	}

	public void showArray(int[] array) 
	{
		for(int i:array)
		{
			System.out.print(i + " ");
		}
	}
}

如果要实现倒排序,在代码块中只需要将 if(array[j] > array[index]) 的“>”改为“<”即可

3、反转排序

基本思想:把数组的最后一个元素与第一个元素进行交换,第二个元素与倒数第二个元素进行交换,其他的元素以此类推,直到所有元素完成反转排序。

public class ReverseSort
{
	public static void main(String args[])
	{
		// 创建一个数组以待后续进行排序使用
		int array[] = {10,20,30,40,50,60};
	
		
		// 创建反转排序类的对象
		ReverseSort sorter = new ReverseSort();
		
		// 调用排序对象的方法,将数组反转
		sorter.sort(array);
	}
	
	// 反转排序的具体方法
	public void sort(int array[])
	{
		// 打印输出反转排序前的输出结果
		System.out.println("反转排序前的输出结果为:");
		showArray(array);
		
		// 实现步骤
		int temp;
		for(int i = 0;i < array.length/2;i++)
		{
			temp = array[i];
			array[i] = array[array.length - 1 - i]; // 对称的两个值进行互换
			array[array.length -1 - i] = temp;
		}
		
		// 打印输出排序后的结果
		System.out.println("\n反转排序后的输出结果为:");
		showArray(array);
	}

	public void showArray(int[] array) 
	{
		for(int i:array)
		{
			System.out.print(i + " ");
		}
		
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值