Java简单算法之 冒泡排序 选择排序 插入排序

1冒泡排序

public class BubbleSort
{
	public static void main(String[] args)
	{
		int[] arr = { 44, 33, 11, 22, 88, 55, 77, 66 }; //定义一个数组,里面的数字是无序的
		
		bubbleSort(arr);

		for (int i = 0; i < arr.length; i++)
		{
			System.out.println(arr[i]);
		}
	}

	// 冒泡排序 思路:
	// 1.比较几轮(外围循环次数)
	// 2.每轮比较几次 
	// 3.谁和谁比 
	
	
	//1.每一次比较确定一个数  所以要比较(arr.length - 1)次     (2个数比一次就可以确定顺序) 
	//2 由于一轮比较下来确定右边元素最大 ,所有下次比较则少一次
	//3 每轮比较都是从1和2比开始,然后2和3比,3和4比 ... (都是从第一个数开始比较).开始比较的下标是0
	//4 比较多少轮,最右边就有几个数已经排好序
	

	
	public static void bubbleSort(int arr[])
	{
		for (int x = 0; x < arr.length - 1; x++)//比较轮数
		{
			for (int y = 0; y < arr.length - 1 - x; y++)//每轮比较次数
			{
				if (arr[y] > arr[y + 1])//满足条件交换
				{
					int temp = arr[y + 1];
					arr[y + 1] = arr[y];
					arr[y] = temp;
				}
			}
		}
	}
	
	
	//一样道理 不同写法如下   
	
	public static void bubbleSort(int[] arr)
	{
		for (int x = arr.length - 1; x >0; x--)
		{
			for (int y = 0; y < x; y++)
			{
				if(arr[y]>arr[y+1])
				{
					int temp = arr[y+1];
					arr[y+1] = arr[y];
					arr[y] = temp;
				}
			}
		}
	}
}

2.选择排序

public class SelectSort
{
	public static void main(String[] args)
	{
		int[] arr = { 44, 33, 11, 22, 88, 55, 77, 66 };
		
		selectSort(arr);

		for (int i = 0; i < arr.length; i++)
		{
			System.out.println(arr[i]);
		}

	}

	
	// 选择排序
	//比较几轮  
	//每轮比较几次    
	//谁和谁比        
	
	<pre name="code" class="java">        //1.每一次比较确定一个数  所以要比较(arr.length - 1)次     (2个数比一次就可以确定顺序) 
	//比较次数递减 ,每次比较可以确定左边那个值最小
	//比较方式,开始是1和2比,然后1和3,然后1和4,以此类推.也就是拿第一个元素和所有元素分别比较一次,小的放在第一位,一轮下来 ,确定最小值
	//第二轮 2和3比,2和4比,2和5比 .... 2个之中比较的那个放在第二位 ,可以确定这个值是第二小.  
	//接下来 以此类推
	
	//每一轮来说  开始比较的那个数下标每轮加1,想到下面的x变量没有。
	
	//外圈里面的x变量刚刚好是循环一次加1  我们就arr.length - x来确定每轮比多少次

	
		public static void selectSort(int[] arr)
	{
		for (int x = 0; x < arr.length -1; x++)//比较多少轮
		{
			for (int y = x+1; y < arr.length - x; y++)//int y = x+1 ,每次比较完一轮,开始坐标+1,刚刚好符号x特点
			{
				if(arr[x]>arr[y])
				{
					int temp = arr[y];
					arr[y] = arr[x];
					arr[x] = temp;
				}
			}
		}
	}
	
	
	// 一样的原理。循环比较方向不同
	
	public static void selectSort(int[] arr)
	{
		for (int x = arr.length - 1; x >0 ; x--)//比较几轮  
		{
			for (int y = x-1; y>=0; y--)
			{
				if(arr[x]>arr[y])
				{
					int temp = arr[y];
					arr[y] = arr[x];
					arr[x] = temp;
				}
			}
		}
	}
}
 3 插入排序 

public class InsertSort
{
	public static void main(String[] args)
	{
		
		int[] arr = { 44, 33, 11, 22, 88, 55, 77, 66 };

		insertSort(arr);

		for (int i = 0; i < arr.length; i++)
		{
			System.out.println(arr[i]);
		}

	}

	// 插入排序
	// 循环几轮
	// 每次循环几次
	// 谁和谁比

	// 我们假定左边第一个是最小的数 ,so 它可以看作是有序的, 就比如任何2个不等元素都可以看作有序的

	// 一轮确定一个数    是  arr.length-1
	
	// 不确定,分情况,我们想下,我们如果把一个数字插入一个有序数列中,首先和右边最大比,大就不同换了,否则和第二大的那个比,同理大就不用换         
	
	// 插入排序一个很重要的道理就是   大就不往下比了
	
	// 其实就好象一个数和一个有序数列的里面的数字比   找到自己的位置

	 public static void insertSort(int[] arr)
 	{
 		for (int x = 0; x < arr.length - 1; x++)//循环次数
 		{
			 for (int y = x; y >=0; y--)//X递增的 ,刚刚好适合我们Y坐标起始。    
			{
				if (arr[y] > arr[y + 1]) //前面比后面的大,换
				{
					int temp = arr[y + 1];
					arr[y + 1] = arr[y];
					arr[y] = temp;
				}
				else//后面比前面大 ,前面又是有序的,不换 
				{
					break;
				}
			}
		}
	}
}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值