黑马程序员——Java基础语法:几种简单的排序算法的实现

------- android培训java培训、期待与您交流! ----------


        1.快速排序:它通过一趟排序将要排序的元素分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分元素分别进行快速排序,整个排序以递归的方式进行,从而最终使所有元素有序。


        2.选择排序:每一趟从待排序的元素中选出最小的一个元素,顺序放在已排好序的数列的一端,直到全部待排序的元素变得有序。


        3.冒泡排序:它通过不断遍历要排序的数列,每次比较两个元素,交换顺序错误的元素。一直重复遍历交换直到没有需要交换的元素为止。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

   

package com.itheima;

/**
 * 几种简单的排序算法的实现
 * @author Ryan
 */

public class SortUtils {
	/*
	 * 快速排序
	 * */
	public static void quickSort(int[] arr,int low,int high)
	{
		int temp;										//定义一个变量用于存放枢轴
		int left = low,right = high;						
		if (low<high){
			temp = arr[low];
	
	//该循环完成了一趟排序,将大于枢轴的元素放在右边,而小于枢轴的元素放在左边
			while(left!=right){
				while(right>left&&arr[right]>temp)		//从右往左寻找一个小于枢轴的元素
					right--;							
				if(left<right){							
					arr[left] = arr[right];					//将这个找到的元素放在枢轴左边
					left++;
				}
				while(left<right&&arr[left]<temp)			//从左往右寻找一个大于枢轴的元素
					left++;
				if(left<right){
					arr[right] = arr[left];					//将这个找到的元素放在枢轴右边
					right--;
				}
			}
			arr[left] = temp;							//把枢轴放在正确的位置
			
			quickSort(arr,low,left-1);						//通过递归最终排序完成
			quickSort(arr,left+1,high);
		}
	}
	
	/*
	 *选择排序
	 *内循环就结束一次,最值出现头角标位置 
	 */
	public static void selectSort(int[] arr)
	{
		for (int x=0; x<arr.length-1; x++)
		{
			for (int y=x+1; y<arr.length; y++)
			{
				if (arr[x]>arr[y])
					swap(arr,x,y);
			}
		}
	}
	
	/*
	 * 冒泡排序:相邻的两个元素进行比较,如果符合条件就换位
	 * 			内循环一次,最值出现在尾角标的位置
	 * */
	public static void bubbleSort(int[] arr)
	{
		for (int x=0; x<arr.length-1; x++)
		{
			for (int y=0; y<arr.length-x-1; y++)			//-x是为了让每一次比较的元素减少,-1是为了防止角标越界
			{
				if (arr[y]>arr[y+1])
					swap(arr,y,y+1);
			}
		}
	}
	
	//为选择排序和冒泡排序定义一个交换数组中元素的方法
	public static void swap(int[] arr,int a,int b)
	{
		int temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}
}



------- android培训java培训、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值