关于选择排序的Java模板

选择排序算法详解
本文详细介绍了一种简单直观的排序算法——直接选择排序。该算法通过多次遍历未排序部分找到最小元素并将其移至已排序序列末尾的方式完成排序过程。文章提供了完整的Java实现代码示例,并展示了对一个整数数组进行排序的具体操作。
/*
 * 选择排序的基本思想是:每一躺(例如第i躺,i=0,1,...,n-2)在后面n-i个待排序的元素中
 * 选出排序码最小的元素,作为有序元素序列的第i个元素。待到第n-2躺做完,待排序元素只剩下一个
 * ,就不用排序了
 * 
 * 
 */
public class SelectSort <E extends Comparable<E>>
{
	private E[] elementArray;
	int length;
	public SelectSort(E[] array) 
	{
		elementArray = array;
		length = array.length;
	}
/*
 * 直接选择排序是一种简单的排序方法,它的基本步骤是:
 * 1.在一组元素V[i]-V[n-1]中选择具有最小排序码的元素;
 * 2.若它不是这组元素中的第一个元素,则将它与这组元素中的第一个元素对调;
 * 3.在这组元素中剔除这个具有最小排序码的元素,在剩下的元素V[i+1]-V[n-1]中重复执行第1、2步。直到剩下的元素只有一个为止。
 * 
 */

	public void directSelectSort() 
	{
		for(int i=0;i<length;i++)
		{
			int minIndex = i;
			for(int j=i;j<length;j++)
			{
				if (elementArray[j].compareTo(elementArray[minIndex])<0) 
				{
					minIndex = j;
				}
			}
			if (minIndex!=i) 
			{
				E temp = elementArray[minIndex];
				elementArray[minIndex] = elementArray[i];
				elementArray[i] = temp;
			}
		}
	}
	public void print() 
	{
		for (int i = 0; i < length; i++) 
		{
			System.out.println(elementArray[i]);
		}
	}
}

Example for the model:

		Integer[] array6 = {36,3,2,2,9,1,4,8};
		SelectSort<Integer> test6 = new SelectSort<>(array6);
		test6.directSelectSort();
		test6.print();

The result of the example:

1
2
2
3
4
8
9
36

以下是标准快速排序Java 代码模板: ```java import java.util.Arrays; public class QuickSort { // 分区方法,将数组分为两部分,左边部分小于等于基准元素,右边部分大于基准元素 private static int partition(int[] arr, int low, int high) { // 选择最后一个元素作为基准元素 int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] <= pivot) { i++; // 交换 arr[i] 和 arr[j] int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // 将基准元素放到正确的位置 int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } // 快速排序的递归方法 private static void sort(int[] arr, int low, int high) { if (low < high) { // 分区操作,获取基准元素的位置 int pivotIndex = partition(arr, low, high); // 对基准元素左边的子数组进行排序 sort(arr, low, pivotIndex - 1); // 对基准元素右边的子数组进行排序 sort(arr, pivotIndex + 1, high); } } // 对外提供的排序方法 public static void quickSort(int[] arr) { if (arr == null || arr.length == 0) { return; } sort(arr, 0, arr.length - 1); } public static void main(String[] args) { int[] arr = {10, 5, 30, 15, 6}; System.out.println("排序前: " + Arrays.toString(arr)); quickSort(arr); System.out.println("排序后: " + Arrays.toString(arr)); } } ``` 上述代码实现了快速排序算法。首先通过`partition`方法将数组分为两部分,使得左边部分的元素都小于等于基准元素,右边部分的元素都大于基准元素,然后递归地对左右两部分进行排序。 此外,还可以对上述代码进行尾递归优化,减少递归调用的次数,以下是尾递归优化后的代码: ```java import java.util.Arrays; public class QuickSortOptimized { private static int partition(int[] arr, int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] <= pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } private static void sort(int[] arr, int low, int high) { int pivotIndex; while (low < high) { pivotIndex = partition(arr, low, high); sort(arr, low, pivotIndex - 1); low = pivotIndex + 1; } } public static void quickSort(int[] arr) { if (arr == null || arr.length == 0) { return; } sort(arr, 0, arr.length - 1); } public static void main(String[] args) { int[] arr = {10, 5, 30, 15, 6}; System.out.println("排序前: " + Arrays.toString(arr)); quickSort(arr); System.out.println("排序后: " + Arrays.toString(arr)); } } ``` 尾递归优化后的代码通过使用`while`循环减少了递归调用的次数,降低了对栈空间的使用,提高了性能 [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值