Java工具类——排序

最近想着封装一些常用的工具类。


先拿最常用最简单的数组排序来练练手。

日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序、堆排序、基数排序、归并排序等。


数字排序算法通常用来作为算法入门课程的基本内容,在实际应用(尤其是普通商业软件)中使用的频率较低,但是通过排序算法的实现,可以深入了解计算机语言的特点,可以以此作为学习各种编程语言的基础。


冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。


冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将这两个数按序排好。

示例:将数组用冒泡排序降序排列。

int[] a={11,22,66,44,33,55,88,99,77};
for(int i=0;i<a.length-1;i++){
	//从1开始,到a.length-i-1结束。共a.length-i-1次。
	for(int j=1;j<a.length-i;j++){
		if(a[j-1] < a[j]){
			int temp=a[j-1];
			a[j-1]=a[j];
			a[j]=temp;
		}
	}
}

写一个封装类,涵盖升序和降序:

	/**
	 * 冒泡排序
	 * @param arr	待排序的数组
	 * @param asc	是否按升序排序
	 * @return	排序后的数组
	 */
	public static int[] bubbleSort(int[] arr,boolean asc){
		for(int i=0;i<arr.length-1;i++){
			//从1开始,到a.length-i-1结束。共a.length-i-1次。
			for(int j=1;j<arr.length-i;j++){
				if(asc?arr[j-1] > arr[j]:arr[j-1] < arr[j]){
					int temp=arr[j-1];
					arr[j-1]=arr[j];
					arr[j]=temp;
				}
			}
		}
		return arr;
	}


当然,也可以写2个小方法来区分升序和降序:

	/**
	 * 冒泡排序,升序
	 * @param arr	待排序的数组
	 * @return	排序后的数组
	 */
	public static int[] bubbleSortAsc(int[] arr){
		return bubbleSort(arr, true);
	}


	/**
	 * 冒泡排序,降序
	 * @param arr	待排序的数组
	 * @return	排序后的数组
	 */
	public static int[] bubbleSortDesc(int[] arr){
		return bubbleSort(arr, false);
	}


选择排序

基本思想是每次从待排数据中选择第n小的数据放到排序列表的第n个位置。
(假设数据放在一个数组a中,且数组的长度是N)

  1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置

  2:从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第1步结束后a[0]就是N个数的最小值)

  3:从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第2步结束后a[1]就是N-1个数的最小值)

  以此类推,N-1次排序后,待排数据就已经按照从小到大的顺序排列了。


封装类:

	/**
	 * 选择排序
	 * @param arr	待排序的数组
	 * @param asc	是否按升序排序
	 * @return	排序后的数组
	 */
	public static int[] selectSort(int[] arr,boolean asc){
		for(int i=0;i<arr.length-1;i++){
			//从i+1开始,到a.length-1结束。共a.length-i-1次。
			for(int j=i+1;j<arr.length;j++){
				if(asc?arr[i] > arr[j]:arr[i]<arr[j]){
					int temp=arr[i];
					arr[i]=arr[j];
					arr[j]=temp;
				}
			}
		}
		return arr;
	}


同样,选择升序:

	/**
	 * 选择排序,升序
	 * @param arr	待排序的数组
	 * @return	排序后的数组
	 */
	public static int[] selectSortAsc(int[] arr){
		return selectSort(arr, true);
	}

选择降序:

	/**
	 * 选择排序,降序
	 * @param arr	待排序的数组
	 * @return	排序后的数组
	 */
	public static int[] selectSortDesc(int[] arr){
		return selectSort(arr, false);
	}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值